3

DecimalFormatで丸めの「機能」を無効にできますか?

例えば:

DecimalFormat f = new DecimalFormat();

f.parseObject("123456789012345.99");

結果は1.2345678901234598E14です

Javaバージョン「1.6.0_21」

4

3 に答える 3

5

これは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に適合します

于 2011-02-07T10:25:09.003 に答える
1

いいえ、それは丸めではありません。それは浮動小数点数が機能する方法です。

あなたが望むことをする唯一の方法はBigDecimalを使うことです。

「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」を読むことをお勧めします。

于 2011-02-07T10:14:47.390 に答える
1

私が理解している限り、あなたは番号を特別な形式で印刷したいと思っています。次のようにapplyPattern(String Pattern)を呼び出す必要があります。

  f.applyPattern(".000");
  System.out.println(f.format(123456789.99)); // prints 123456789.990

ノートパターンはローカライズされています。たとえば、ドイツでは、の代わりにが印刷されます。分数を分離します。丸めの優先順位は、次の方法で設定できます。

f.setRoundingMode()

私はこれをどこで学んだと思いますか?もちろん、Javaドキュメントから。パターン式の詳細を読んで、好きなようにフォーマットします

于 2011-02-07T10:57:35.497 に答える