当前位置: 首页 > 面试题库 >

Java BigDecimal setScale并使用half_even四舍五入

卢锋
2023-03-14
问题内容

我将以下代码与具有Half_even舍入模式的Java BigDecimal setScale方法配合使用,并获得以下结果。

new BigDecimal(1.115).setScale(2, RoundingMode.HALF_EVEN).toPlainString()

结果:1.11

预期值:1.12

由于最接近5的偶数应该是2,因此我期望的结果是1.12。但是结果是1.11。然后再次,

new BigDecimal(1.145).setScale(2, RoundingMode.HALF_EVEN).toPlainString()

结果:1.15

预期值:1.14

因为5左边的偶数是4,所以我期望结果是1.14。有什么解释吗?


问题答案:

这是由浮点不精确(在您的double输入值中)引起的。

System.out.println(new BigDecimal(1.115));

1.1149999999999999911182158029987476766109466552734375

请改用String构造html" target="_blank">函数。

BigDecimal.valueOf("1.115")

一旦数字为BigDecimal,就不会丢失精度,并且舍入可以正常进行。但是,您必须确保该数字完整无缺(通过强制采用浮点类型将其保留为BigDecimal之前的精度)。



 类似资料:
  • 本节讨论了精度数学的四舍五入特性,ROUND()函数,以及插入DECIMAL列时的四舍五入特性。 ROUND()函数的行为取决于其参量是准确的还是近似的: ·对于准确值数值,ROUND()采用“半值向上舍入”规则:如果小数部分的值为.5或更大,如果是正数,向上取下一个整数,如果是负数,向下取下一个整数(换句话讲,以0为界限执行舍入)。如果小数部分的值小于.5,如果是正数,向下取下一个整数,如果是负

  • 问题内容: 我怎么总是将a舍入为一个,而不舍入它。我知道,但是我希望它总是四舍五入。因此,如果为,则四舍五入为4。 问题答案: 您可以使用方法。 请参阅JavaDoc链接:https ://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double ) 从文档: 细胞 返回大于或等于自变量且等于数学整数的最小(最接近负无穷大

  • 我一直在尝试在java中使用bigdecimal进行取整,并遇到了一个java。显示非终止十进制扩展的lang.ArithmeticException错误。 谁能解释一下这个错误的起源吗?因为我对java还很陌生?帮我写代码? 谢谢 变量“d”是我认为产生错误的地方。

  • 有人能告诉我怎么打双人球吗 e、 g.从双倍值55.6666666666667开始-四舍五入到双倍值56.0000000000- 或者从55.333333333333开始-四舍五入到55.0000000000的两倍- 谢谢。

  • 问题 你想对浮点数执行指定精度的舍入运算。 解决方案 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可。比如: >>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 >>> round(-1.27, 1) -1.3 >>> round(1.25361,3) 1.254 >>> 当一个值刚好在两个边界的中间的时候, round

  • 本文向大家介绍javascript中toFixed()四舍五入使用方法详解,包括了javascript中toFixed()四舍五入使用方法详解的使用技巧和注意事项,需要的朋友参考一下 最近做的项目涉及到金额的计算,有一种方式就是进行四舍五入的规则进行小数点后面的尾数处理,以前一直以为toFixed方法就是四舍五入的,知道一个用户反馈了金额计算的bug我才如梦初醒(亏了一毛钱),才仔细深究了下toF