倍精度浮動小数点値があります1.068879335
。1.07 のように 2 つの小数値のみで切り上げたいです。
こうやってみました
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value);
double finalValue = Double.parseDouble(formate) ;
これにより、次の例外が発生します
java.lang.NumberFormatException: For input string: "1,07"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
私のコードの何が間違っているのか誰か教えてもらえますか。
最後に、finalValue = が必要です1.07;
ベストアンサー1
文字列内のカンマに注意してください: "1,07"。DecimalFormat
はロケール固有の区切り文字列を使用しますが、Double.parseDouble()
は使用しません。小数点区切りが "," である国に住んでいるため、数値を解析することはできません。
ただし、同じものを使用してDecimalFormat
解析し直すことができます。
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value);
double finalValue = (Double)df.parse(formate) ;
しかし、実際には代わりにこれを実行する必要があります:
double finalValue = Math.round( value * 100.0 ) / 100.0;
注記:すでに指摘したように、浮動小数点を使用するのは、精度を正確に制御する必要がない場合に限ります。(金融計算が主な例です。ない使用するには。