我想要一个函数来转换 Bigdecimal 10.12 for 10.12345
和 10.13 for 10.12556
。但是没有功能可以同时满足这两种转换。请帮助实现这一目标。
以下是我尝试过的。
值为 10.12345:
BigDecimal a = new BigDecimal("10.12345");
a.setScale(2, BigDecimal.ROUND_UP)
a.setScale(2, BigDecimal.ROUND_CEILING)
a.setScale(2, BigDecimal.ROUND_DOWN)
a.setScale(2, BigDecimal.ROUND_FLOOR)
a.setScale(2, BigDecimal.ROUND_HALF_DOWN)
a.setScale(2, BigDecimal.ROUND_HALF_EVEN)
a.setScale(2, BigDecimal.ROUND_HALF_UP)
输出 :
10.12345::10.13
10.12345::10.13
10.12345::10.12
10.12345::10.12
10.12345::10.12
10.12345::10.12
10.12345::10.12
值为 10.12556:
BigDecimal b = new BigDecimal("10.12556");
b.setScale(2, BigDecimal.ROUND_UP)
b.setScale(2, BigDecimal.ROUND_CEILING)
b.setScale(2, BigDecimal.ROUND_DOWN)
b.setScale(2, BigDecimal.ROUND_FLOOR)
b.setScale(2, BigDecimal.ROUND_HALF_DOWN)
b.setScale(2, BigDecimal.ROUND_HALF_EVEN)
b.setScale(2, BigDecimal.ROUND_HALF_UP)
输出 :
10.12556::10.13
10.12556::10.13
10.12556::10.12
10.12556::10.12
10.12556::10.12
10.12556::10.12
10.12556::10.12
原文由 sunleo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为您正在寻找的
RoundingMode
是ROUND_HALF_EVEN
。从 javadoc :这是一个快速测试用例:
正确打印:
更新:
setScale(int, int)
自从 Java 1.5 首次引入枚举以来不推荐使用,并最终在 Java 9 中弃用。您现在应该使用setScale(int, RoundingMode)
例如:setScale(2, RoundingMode.HALF_EVEN)