如何在舍入后添加终端零

时间:2014-02-03 06:43:35

标签: java rounding

每次用户这样说时,我都会尝试舍入到不同的小数位数。我一直在尝试

BigDecimal dec = new BigDecimal(input).setScale(places, BigDecimal.ROUND_HALF_EVEN);

(和ROUND_HALF_UP,然后执行dec.doubleValue())但它不会添加终端零。

例如,0.4595变为0.46,而不是0.460。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

你为什么打电话给doubleValue()?避免这样做。它有两个问题:

  • double
  • 不同,BigDecimal没有尾随零的概念
  • doubleBigDecimal之间转换(向任一方向)几乎总是一个坏主意。它们通常用于不同的值 - 例如高度和重量等物理尺寸最适合double;人工价值(如货币)最适合BigDecimal

没有拨打doubleValue(),你就可以了:

import java.math.*;

public class Test {
    public static void main(String[] args) {
        String input = "0.4595";
        int places = 3;
        BigDecimal dec = new BigDecimal(input)
            .setScale(places, BigDecimal.ROUND_HALF_EVEN);
        System.out.println(dec); // Prints 0.460
    }
}

答案 1 :(得分:0)

将其更改为:

BigDecimal dec = new BigDecimal(input).setScale(3, BigDecimal.ROUND_HALF_EVEN);