为什么BigDecimal
在四舍五入而不是预期值后返回此值,我该如何达到此值?
// EXPECTED 0.45
// RETURNS 0.45
System.out.println(BigDecimal.valueOf(Double.parseDouble("0.45"))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
// EXPECTED 0.45
// RETURNS 0.45
System.out.println(BigDecimal.valueOf(Double.parseDouble("0.445"))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
// EXPECTED 0.45
// RETURNS 0.44
System.out.println(BigDecimal.valueOf(Double.parseDouble("0.4445"))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
答案 0 :(得分:1)
这是文字问题的答案
为什么BigDecimal会在舍入到一半之后返回此值 预期价值,我怎么能达到这个目标?
应用于0.4445舍入到0.44而不是“预期”0.45。
舍入模式向“最近邻居”舍入,除非两者都是 邻居是等距的,在这种情况下会进行整理。
比例因子两个邻居是0.44和0.45。 0.4445和0.44之间的绝对差值为0.0045。 0.4445和0.45之间的绝对差值为0.0055。邻居不是等距的,0.44是最近的邻居。
如果您真的想要一个奇怪且不必要的不准确的舍入模式,请使用BigDecimal的toString方法来获取完整的String表示。然后,您可以使用String操作以任何方式对其进行修改。