晚上好:
我在用3个或更多小数点舍入数字时遇到问题。
例如,我有以下电话号码: 1544.565
我正在尝试将其四舍五入为 1544.57
我尝试过:
MyPlugin_new
BigDecimal.ROUND_HALF_EVEN
BigDecimal.ROUND_UP
RoundingMode.HALF_EVEN
RoundingMode.HALF_UP
RoundingMode.CEILING
所有人都给了我同样的错误结果:1544.56 我正在尝试获取1544.57
请问有什么解决方法吗?
答案 0 :(得分:3)
尝试使用比例2的ROUND_UP
:
BigDecimal bigDecimal = new BigDecimal("1544.565");
System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_UP)); // 1544.57
答案 1 :(得分:0)
在JDK 1.8中,您可以为此使用java.text.DecimalFormat
new DecimalFormat("0.00").format(1544.565)
输出
1544.57
阅读doc,以识别更多模式字符。
更新2 (回答this comment)
:您使用的是BigDecimal.ROUND_HALF_EVEN
,请改用BigDecimal.ROUND_HALF_UP
。
不要使用BigDecimal.ROUND_UP
,它总是将数字四舍五入。
BigDecimal.ROUND_HALF_UP
除非两个邻居之间的距离相等,否则舍入模式将朝“最近的邻居”舍入。
~Java doc~
示例:
BigDecimal number = new BigDecimal("1544.565");
System.out.println(number.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
输出
1544.57
答案 2 :(得分:0)
已确认here;
double a = 1544.565;
double rounded = Math.round(a * 100.0) / 100.0;
System.out.println(rounded);
输出1544.57
。