重複の可能性:
Java Float.parseFloat での丸め
文字列を float に変換したいのですが、次のように言います。
System.out.println(Float.parseFloat("1553781.9829"));
出力:
1553782.0
私は言う:
System.out.println(Float.valueOf("1553781.9829"));
出力:
1553782.0
精度を落とさずに Float を取得するには?
重複の可能性:
Java Float.parseFloat での丸め
文字列を float に変換したいのですが、次のように言います。
System.out.println(Float.parseFloat("1553781.9829"));
出力:
1553782.0
私は言う:
System.out.println(Float.valueOf("1553781.9829"));
出力:
1553782.0
精度を落とさずに Float を取得するには?
あなたが正確さを求めているなら、私はBigDecimalをお勧めします
これは、すべての操作にメソッドを提供する通常のラッパー クラスと同じです。はい、引数も文字列として受け取ります。
BigDecimal bd = new BigDecimal("1553781.9829");
System.out.println(" bd :"+ bd); //prints the same value
URL : http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html
精度を失うリスクなしに float または double を使用することはできません。まず第一に、それらの精度は制限されています。float の場合は 10 進数で約 7 ~ 8 桁、double の場合は約 16 桁です。それとは別に、Java 浮動小数点型は内部的にバイナリであるため、精度を失うことなく一部の小数を格納することはできません。本当に正確な小数が必要な場合は、java.math.BigDecimal を使用してください。「Effective Java」の項目 48: 「正確な答えが必要な場合は float と double を避ける」を読んでください。
代わりにFloat使用できますDouble
System.out.println(Double.valueOf("1553781.9829"));
System.out.println(Double.parseDouble("1553781.9829"));