DecimalFormatで丸めの「機能」を無効にできますか?
例えば:
DecimalFormat f = new DecimalFormat();
f.parseObject("123456789012345.99");
結果は1.2345678901234598E14です
Javaバージョン「1.6.0_21」
DecimalFormatで丸めの「機能」を無効にできますか?
例えば:
DecimalFormat f = new DecimalFormat();
f.parseObject("123456789012345.99");
結果は1.2345678901234598E14です
Javaバージョン「1.6.0_21」
これはJavaの機能とは何の関係もありません。これは、IEEE64ビット倍精度浮動小数点数の精度が制限されているためです。実際、すべてのデータ型には精度に制限があります。SOmeは他のものよりも大きいです。
double d = 123456789012345.99;
System.out.println(d);
プリント
1.2345678901234598E14
より正確なものが必要な場合は、BigDecimalを使用してください。
BigDecimal bd = new BigDecimal("123456789012345.99");
System.out.println(bd);
プリント
123456789012345.99
BigDecimalにも制限がありますが、制限はあなたや他の人が必要とするものをはるかに超えています。(〜20億桁)
編集:既知の最大の素数はBigDecimalhttp://primes.utm.edu/largest.htmlに適合します
いいえ、それは丸めではありません。それは浮動小数点数が機能する方法です。
あなたが望むことをする唯一の方法はBigDecimalを使うことです。
「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」を読むことをお勧めします。
私が理解している限り、あなたは番号を特別な形式で印刷したいと思っています。次のようにapplyPattern(String Pattern)を呼び出す必要があります。
f.applyPattern(".000");
System.out.println(f.format(123456789.99)); // prints 123456789.990
ノートパターンはローカライズされています。たとえば、ドイツでは、の代わりにが印刷されます。分数を分離します。丸めの優先順位は、次の方法で設定できます。
f.setRoundingMode()
私はこれをどこで学んだと思いますか?もちろん、Javaドキュメントから。パターン式の詳細を読んで、好きなようにフォーマットします