Mil*_*sai 0 java bigdecimal floor ceil
我一直在研究用 编写的公差计算代码Double,有精度和舍入问题我决定继续BigDecimal考虑它更精确并且不太可能遇到舍入问题。在计算中,一段代码在分割值时使用Math.floor()和Math.Ceil。
奇怪的观察结果,ROUNDING_MODE.floor并且ceil在使用 时实际上并不适用BigDecimal,这是最小的可重现示例。
Double doubleFloor = Math.floor(5.5/1.0);
Double doubleCeil = Math.ceil(5.5/1.0);
System.out.println(doubleFloor);
System.out.println(doubleCeil);
BigDecimal bigDecimalFloor = BigDecimal.valueOf(5.5).divide(BigDecimal.ONE,1,RoundingMode.FLOOR);
BigDecimal bigDecimalCeil = BigDecimal.valueOf(5.5).divide(BigDecimal.ONE,1,RoundingMode.CEILING);
System.out.println(bigDecimalFloor);
System.out.println(bigDecimalCeil);
Run Code Online (Sandbox Code Playgroud)
我希望为这么小的除法打印相同的值,但是我得到以下结果,floor 和 ceil 似乎没有按预期计算。
5.0
6.0
5.5
5.5
Run Code Online (Sandbox Code Playgroud)
我错过了什么。?
先感谢您
引用Javadoc
如果必须执行舍入以生成具有指定比例的结果,则应用指定的舍入模式。
5.5 当比例为 1 时不需要舍入,因此不应用舍入模式。
它会工作就像Math.floor和Math.ceil如果规模分别为0:
BigDecimal bigDecimalFloor = BigDecimal.valueOf(5.5).divide(BigDecimal.ONE,0,RoundingMode.FLOOR);
BigDecimal bigDecimalCeil = BigDecimal.valueOf(5.5).divide(BigDecimal.ONE,0,RoundingMode.CEILING);
System.out.println(bigDecimalFloor);
System.out.println(bigDecimalCeil);
Run Code Online (Sandbox Code Playgroud)
输出
5
6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |