Search code examples
javadoubleroundingnumberformatexception

Double value to round up in Java


I have a double value = 1.068879335 i want to round it up with only two decimal values like 1.07.

I tried like this

DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value);
double finalValue = Double.parseDouble(formate) ;

this is giving me this following exception

java.lang.NumberFormatException: For input string: "1,07"
     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
     at java.lang.Double.parseDouble(Double.java:510)

can some one tell me what is wrong with my code.

finaly i need the finalValue = 1.07;


Solution

  • Note the comma in your string: "1,07". DecimalFormat uses a locale-specific separator string, while Double.parseDouble() does not. As you happen to live in a country where the decimal separator is ",", you can't parse your number back.

    However, you can use the same DecimalFormat to parse it back:

    DecimalFormat df=new DecimalFormat("0.00");
    String formate = df.format(value); 
    double finalValue = (Double)df.parse(formate) ;
    

    But you really should do this instead:

    double finalValue = Math.round( value * 100.0 ) / 100.0;
    

    Note: As has been pointed out, you should only use floating point if you don't need a precise control over accuracy. (Financial calculations being the main example of when not to use them.)