1
public static double centsToDollars(Number cents, int precision) {
    return BigDecimal.valueOf(cents.doubleValue() / 100).setScale(precision, RoundingMode.DOWN).doubleValue();
}

セント値をドルで表示したい場合、上記のコードは完全に正常に機能します。たとえば、1セントの場合、0.01ドルを返します。

assertEquals("$0.01", FormatUtils.centsToDollars(1, 3)) 
assertEquals("$0.012", FormatUtils.centsToDollars(1.2345, 3))
assertEquals("$0.327", FormatUtils.centsToDollars(32.7, 3))

しかし、私には理解できません。なぜFormatUtils.centsToDollars(0.65, 3)$0.0060を返すのですか。代わりに0.006を受け取ることを期待しています。最新のゼロは何ですか?

アップデート

doubleValue()問題の根本的な原因はの呼び出しであるように見えますBigDecimal

System.out.println(Double.parseDouble("0.006")); 

System.out.println(BigDecimal.valueOf(0.006).doubleValue());

0.0060を返します

なぜこれが起こるのか手がかりはありますか?

4

2 に答える 2

0

Double クラスの parseDouble は余分なゼロを追加します

いいえ、そうではありません。doubleをフォーマットするために使用しているメソッドはそれを行っています。double には、末尾の 10 進数のゼロは含まれません。小数は何も含まれていません。

于 2013-02-02T23:32:27.313 に答える