Rounding of double numbers in J2ME

Hi,
I have a number like 25.1253345663. How do I round it to 25.1254 for a mobile application. Does J2ME have a library for this. Can I use J2SE libraries?
Thanks

Use this class
If it is ok, say ok. :)
public class Utils
public static String formatDouble(double value, int decimals)
String doubleStr = "" + value;
int index = doubleStr.indexOf(".") != -1 ? doubleStr.indexOf(".")
: doubleStr.indexOf(",");
// Decimal point can not be found...
if (index == -1) return doubleStr;
// Truncate all decimals
if (decimals == 0)
return doubleStr.substring(0, index);
int len = index + decimals + 1;
if (len >= doubleStr.length()) len = doubleStr.length();
double d = Double.parseDouble(doubleStr.substring(0, len));
return String.valueOf(d);
}

Similar Messages

  • Problem with the  addition of  double numbers

    when we try to add the two double numbers say,
    119.52, 10.00
    here we should get 129.52
    but it is giving as 129.51999999999998
    This is happening only for sum numbers.
    Here i want to round this to two digits after decimal point
    if i round the above value i will get 129.52 and the problem will be solved.
    But we don't know exactly on what basis we are getting the sum as 129.51999999999998.
    Assume that, tomorrow when we are adding some other numbers we may got like
    129.51444444444448
    when we round this we get 129.51
    but actually we have to get 129.52.
    If anyone know why the system is giving that wrong sum , please give solution to avoid this.
    In My application , i want the exact sum amount so if i add some numbers i should get exact sum.
    like 119.52+10=129.52
    i want exactly this. How to get this.

    As another poster said, this is a topic worth reading up on, as there are subtleties involved in this kind of imprecise math. A couple of points to get you started though...
    * Java's double type has a precision of something like 16 (20? 24?) decimal places. (You should be able to find the correct number in the lang. spec., or someone may be kind enough to post it here.) I don't remember the formal definition, but what this means, approximately, is that any number that can be represented will be accurate to within +/-0.5*10^-16 of its value. That is, if the actual value is 2e5, then the absolute value of the error in the representation will be less than 0.5e-11. (I might be off be a factor of 2 and/or an order of magnitude here, but you get the general idea.) The good news is, no value will be in error by more than that amount. The bad news is, any value could be in error by up to that amount. These are the two key points.
    * Compare the precision implicit in your data and needed in your results to that of Java, along with the number of intermediate calculations you'll do to get a final result. For instance, if you're doing financial calcs in the tens of billions of dollars, and you need accuracy to the penny, that's one part in 10^-12. Assuming any given value is off by no more than one part in 10^-16, and assuming all errors are in the same direction, if you do 10^4 cumulative additions, you'll be off by a penny. Again, these are rough, and I may have missed something, but this is the kind of thing to look at to determine how the inherent imprecision will affect you.
    * Don't round any intermediate results. Keep the precision you have. However, when you're comparing (as jschell demonstrated) make a copy of the value and round that copy before doing the comparison. Use the first two points above to determine whether that rounding will meet your needs for precision. Same goes for displaying.
    * Finally, if the 10^-16 (or whatever it was) precision of a double is not sufficient, you can get arbitrary precision with BigDecimal. There are a couple of caveats, however. 1) It's a lot slower than using primitives ans 2) Arbitrary precision does not mean infinite precision. You can specify as many decimal places as you want (subject to time and memory constraints), but you even if you specify 1,000 decimal places, you can still be off by 5 in the 1001st place.

  • Adding two double numbers is a problem

    Hi friends..
    when we try to add the two double numbers say,
    119.52, 10.00
    here we should get 129.52
    but it is giving as 129.51999999999998
    Here i want to round this to two digits after decimal point
    if i round the above value i will get 129.52 and the problem will be solved.
    But we don't know exactly on what basis we are getting the sum as 129.51999999999998.
    Assume that, tomorrow when we are adding some other numbers we may got like
    129.51444444444448
    when we round this we get 129.51
    but actually we have to get 129.52.
    If anyone know why the system is giving that wrong sum amount, please give solution to avoid this.
    To solve this problem, i tried by converting the double numbers to integers and adding these integers and finally converting the sum into double...like
    if
    d1= 119.52
    d2=10
    int x = (int)(119.52*100.00);
    int y = (int)(10.00*100.00);
    int z = x + y;
    double d = (double)(z)/100;
    This is working for this case...
    But when we are applying this approch to other numbers it is giving problem....
    i.e, if i convert like below
    int x = (int)(72.46*100.00);
    this should give x=7246
    but it is giving x=7245
    What is the solution for this problem...please give immediate reply.....

    Assume that, tomorrow when we are adding some other
    numbers we may got like129.51444444444448
    That isn't going to happen. The numerical computations are deterministic. The problem lies in your understanding of how numbers work.
    This has been repeated before so if you want more detail I suggest you search the forums for discussion on precision and double.
    Computers store numbers in binary. The number you are trying to represent is a decimal number. This produces an error in precision.
    The same problem exists in decimal notation. Decimal notation can not accurately represent one divided by three (in decimal 0.33333333.....).

  • Need some help in Rounding a double value to a whole number

    Hey Peeps,
    Need some help here, I got a method that returns a value in double after a series of calculation.
    I need to know how can I round the double value, so for example,
    1. if the value is 62222.22222222, it rounds to 62222 and
    2. if the value is 15555.555555, it rounds to 15556
    How can i do this
    Zub

    Hi Keerthi- Try this...
    1. if the value is 62222.22222222, it rounds to 62222 and
    double d = 62222.22222222;long l = (int)Math.round(d * 100); // truncatesd = l / 100.0;
    double d = 62222.22222222;
    System.out.println(d);
    long l = (int)Math.round(d * 100);
    // truncatesSystem.out.println(l);
    d = l / 100.0;System.out.println(d);
    for (int i = 0; i < 1000; i++)
    {    d -= 0.1;}
    for (int i = 0; i < 1000; i++)
    {    d += 0.1;}System.out.println(d);
    regards- Julie Bunavicz
    Output:
    62222.22222222
    62222
    62222.22
    62222.22000000000001

  • Rounding up doubles to 2 decimal places

    I'm currently rounding up a double in my program using Math.round(double)
    However I want to strip any trailing zeros from the output, so:
    1.235 would round to 1.24
    but 1.00 would round to 1
    How would I go about doing this?

    Also I'm making my own function to round the doubles,
    and they are returning doubles so I cannot return a
    string.If they are returning doubles that the number of "trailing zeros" is irrelevant, as that is formating. Really you should keep the precision until you want to display it, then use the formatter above.
    What are you doing?
    I'm going to take a shot in the dark; has this got something to do with money?

  • Round up double to 2 decimals

    How to round up double to 2 decimals? where in API i should look up? Thank you for your help!
    e.g., Book (including tax) :14.99 + 14.99 * 10% = 16.489 ---> 16.49

         * Scale decimal number via the rounding mode BigDecimal.ROUND_HALF_UP.
         * @param value Decimal value.
         * @param scale New scale.
         * @return Scaled number.
         * @since 1.8.3
        static public double getScaled(double value, int scale) {
            double result = value; //default: unscaled
            //use BigDecimal String constructor as this is the only exact way for double values
            result = new BigDecimal(""+value).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
            return result;
        }//getScaled()

  • Adding two special double numbers

    Adding two double numbers.
    say, 12543.34 and 42895.00 am getting in the decimal part .3999999.
    Now I want .34 instead .399999 and how??
    Can any body help me ??

    Read this (or search the forums--this question is asked at least once a day):
    http://docs.sun.com/source/806-3568/ncg_goldberg.html

  • Round a double value to a specific number of decimal places?

    Hello,
    Is there standard java function which will round a double value to a specified number of decimal places? Something like:
    double d = 4.34523;
    d = round(d, 2);
    where d is finally assigned the value of 4.34?
    Thanks!
    -exits

    No, because doubles hold values in binary (as do all values in a computer, of course, but there's no additional stuff to indicate decimal values).
    If you want values with specific rounding rules in decimal, use java.math.BigDecimal.
    If you just want to format the number with a specified number of decimal digits, use java.text.DecimalNumber.

  • What's the best way to round a double to 12 decimals?

    What's the best way to do it? The math functions don't seem quite right...

    I'm doing three different algoritms that are mathematically identical. I'm working with precisions from 2 to 12 significants digits (working with a function I got from a book), but the results are no exctly what I expect... For example, the one with 12 significant digits is 97.45322134230000001, or something like that... I'm making a method that receiving a double and an n makes a string with the correct number of significant digits... However, rounding the double beforehand would come in handy.

  • Problme while adding double numbers.

    Hi,
    I am trying to get a series of double numbers by adding some constant value to a double number.
    so when i try to add .01 to 10.04 i am getting the result as 10.0499999.. instead of 10.05
    is there any work around for this problem.
    Thanks

    Can Someone tell me please what is going on?
    Trying to add simple double numbers but the result is really surprising.
    double postage = 0.72 ;
    double total = 0.18;
    double totalamt = postage + total;
    System.out.println(totalamt);
    Result: 0.8999999999999999 INSTEAD OF 0.9

  • Rounding a double

    Hi,
    What's the best (and fastest since I got lots of values) way to perform a rounding on a double value?
    I think what I'd like to do is half-up rounding, so when it should round up to 2 digits e.g., it should cut off the rest when the third position is a 0;1;2;3 or 4 and should add one to the second digit, when the third is one out of them: 5;6;7;8;9.
    I tried it myself this way. Now this has happened - at the end (converting int to double) it screws at some values - why and how can I fix that or what is a better way to do this, since this solution looks kind of goofy to me?
        public double roundValue( double dTemp, int iDigits){
             // splitting up into the pure int part of the NOT rounded value
             System.out.println("****   dTemp to round: " + dTemp);
             System.out.println("iDigits to round to: " + iDigits);
              int iIntPart = (int) dTemp;
              dTemp -= (double) iIntPart;
              System.out.println("iIntPart: " + iIntPart);
              System.out.println("dTemp - only minor digits: " + dTemp);
              // calculation of a factor for the lower digits
              double dDigits = 1.0;
              for(int cnt = 0; cnt < iDigits; ++cnt)
                  dDigits *= 10.0;
              System.out.println("dDigits: " + dDigits);
              System.out.println("dTemp * dDigits: " + (dTemp * dDigits));
              System.out.println("Math.round: " + Math.round(dTemp * dDigits));
              System.out.println("Math.round/dDigits: " + ((Math.round(dTemp * dDigits)) / dDigits));
              // processing Math.round()
              dTemp = (Math.round(dTemp * dDigits)) / dDigits;
              System.out.println("dTemp - after: " + dTemp);
              // dTemp is now rounded
              dTemp += (double) iIntPart;
              /* here sometimes, the value returns results like this - why?
               * 4.941519877284079 -> iDigits == 2 -> 4.9399999999999995
               * 5.94004582533272 -> iDigits == 2 -> 5.9399999999999995
              System.out.println("****   dTemp after adding the int part: " + dTemp);
              return dTemp;
        }

    Thanx I tried it out and I thought I had to use Math.round() the way I did. But still what happens at the conversion from an int to a double - just curious?
    I did it now this way - I thought Math.round has some probs, with the digits in front of the point:
        public double roundValue(double iValue, int iDecimalPlace) {
            double dPowerOfTen = 1;
            while (iDecimalPlace-- > 0){
               dPowerOfTen *= 10.0;
            return (Math.round(iValue * dPowerOfTen) / dPowerOfTen);
         }

  • Rounding xs:double value

    Hi in bea xquery function pallette we only foung round() for decimal type.But we had a requirement to round xs:double values.
    How can i achive this ,any method for round double values or to convert double to decimal.

    does round( $someDouble ) not work?
    Can you please try a few things yourself before posting?
    If you already have, can you please post what you have tried?

  • Rounding a double value

    What is the easiest way to round a Double variable to 2 significant figures?
    Cheers Mike

    Oh, classical and very typical question on this forum.
    The short answer is nope. You don't do that and you don't need to do that. If you really really have to must doing that, you used the wrong type - double.
    By definition, double is an approximation. No gurantee on precision lose.
    --lichu                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • Double numbers and precision

    hi, I am trying this:
              double a = 10;
              double k;
              BigDecimal bd = new BigDecimal(a);
              bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
              System.out.println(bd);
              k = bd.doubleValue();
              System.out.println(k);and I get this:
    10.00
    10.0
    which is confusing, because I need to display double numbers with 2 precision digits (DecimalFormat is not usable because it returns Strings)
    I could do that with C, is this possible in Java?

    xpanta wrote:
    hi, I am trying this:
              double a = 10;
              double k;
              BigDecimal bd = new BigDecimal(a);
              bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
              System.out.println(bd);
              k = bd.doubleValue();
              System.out.println(k);and I get this:
    10.00
    10.0
    which is confusing, because I need to display double numbers with 2 precision digits (DecimalFormat is not usable because it returns Strings)
    I could do that with C, is this possible in Java?A double does never have formatting information. (It was a long time ago since I last used C but I can't remember that a double had formatting information there either.)
    Formatting is something you do when you print.
    Kaj

  • Rounding a double to a nearest 5000

    HI Guys,
    I wanted to know the easy way to rounding a double number to nearest to multiples of 5000.
    Thanks
    -nicedude

    Thank you . This is sure not a swing question at all, I should not have posted it here.
    Thanks you anyway for your answer. I did exactly the same thing. i thought somebody may come up with even a brighter idea, so i posted it.
    Thank you once again for your anwer.

Maybe you are looking for

  • Value Mapping through Tables in R/3 from XI

    Hi All, I'm new to XI and got a scenario as "Value Mapping through Tables in R/3 from XI". Kindly do tell me the steps which I should follow to complete this scenario. I'm from ABAP so table creation is known to me, what next should I do after table

  • WL 7.0 Fault-tolerant stateful beans. (Newbie)

    Hello, I was wondering if in WL 7.0 there is a way to make a stateful session bean automatically persist its state without having to be passivated as a whole. The bean that I need to build would persist its state to a DB each time a remote method cal

  • Configuring ERM workflow in CUP issue (GRC AC 5.3)

    Hi once again fellow SAP Security Folk, Using GRC AC CUP 5.3 SP 13 I am trying to configure ERM workflow for the following scenario : Every role change made via ERM requires approval from relevant Business Process (BP) area.  If the role change conta

  • Laptop hp pavilion g6 2016 tx not charging or booting

    My  laptop is hp pavilion g6 2016tx ( Intel i 5 with 1GB AMD graphics 4 GB RAM, 500GB HDD 15'' screen ) which is around 2 years old and now out of warranty.  I had a strange problem with it. I used it till last Sunday ( 24/08/2014) and after use I pr

  • FlattenPages via c#

    Hi,   I was wondering how I could use the JSObject to flatten pages via JavaScript using the Adobe SDK. Below is the sample that I'm using. CAcroApp acroApp = new AcroAppClass(); CAcroAVDoc avDoc = new AcroAVDocClass(); if(!avDoc.Open (FORM_NAME, "")