Java BigDecimal.ROUND_HALF偶数,带有3个小数(奇数和偶数)

时间:2018-07-09 13:29:14

标签: java numbers decimal rounding bigdecimal

晚上好:

我在用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

请问有什么解决方法吗?

3 个答案:

答案 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