小数舍入结果不一致



使用Java:

$ jshell
|  Welcome to JShell -- Version 17.0.3
|  For an introduction type: /help intro

使用"半偶数"四舍五入法,3084.5四舍五入到3084:

jshell> new java.math.BigDecimal("3084.5").setScale(0, java.math.RoundingMode.HALF_EVEN)
$13 ==> 3084

但是3084.51轮询到3085:

jshell> new java.math.BigDecimal("3084.51").setScale(0, java.math.RoundingMode.HALF_EVEN)
$13 ==> 3085

为什么数字1会影响舍入?它超出了在舍入运算中应该考虑的最后一位有效数字(5),对吗?

根据RoundingMode.HALF_EVEN的JavaDoc:

舍入模式,向{@literal "最近邻居"}舍入,除非两个邻居相等,在这种情况下,向偶数邻居舍入。

这意味着,您在.setScale()中设置了0的比例(意味着您想要0个小数):

  • 3084.530843085的距离相等,因此它将是偶数邻居(因此3084是偶数,而3085是奇数)。
  • 3084.51不是等距的,0.013084更接近3085,因此它是最近的邻居。

相关内容

  • 没有找到相关文章

最新更新