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を返します
なぜこれが起こるのか手がかりはありますか?