【发布时间】:2018-07-09 13:29:14
【问题描述】:
晚上好:
我在用 3 位或更多小数四舍五入时遇到问题。
例如,我有这个号码:1544.565
我正在尝试将其四舍五入到 1544.57
我试过了:
BigDecimal.ROUND_HALF_EVENBigDecimal.ROUND_UPRoundingMode.HALF_EVENRoundingMode.HALF_UPRoundingMode.CEILINGRoundingMode.UP
他们都给了我同样的错误结果:1544.56 我正在尝试获取 1544.57
请问有什么解决办法吗?
【问题讨论】:
-
如果您有 1544.564,您应该指定预期的舍入模式,否则可能会有多个答案,但并非所有答案都是您需要的
-
请分享代码
-
OP 拒绝展示一个完整的例子,所以我将分享我的发现,这很可能是造成混乱的原因:如果你采用一个用字面值 1544.565f 初始化的浮点数,它的实际实习值就像 1544.564999。因此,尝试将其四舍五入为两位小数将四舍五入为 1544.56。当对双打做同样的事情时,情况并非如此。因此,问题是您认为您正在使用 BigDecimals,而实际上您在计算中涉及浮点数。
-
所有你的代码-_-°
-
更有趣的代码还没有显示:如何初始化 BigDecimal:使用字符串、浮点数还是双精度数?只有在第一种情况下,您才会得到 exact 数字。大多数情况下,浮点数和双精度数会产生近似值,这可能不是较高数字之间的正好中间。同样,HALF_EVEN 将总是产生一个偶数最后一个数字,所以它永远不会是 7。
标签: java numbers decimal rounding bigdecimal