如何使用BigDecimal显示总是2个小数点的数字?

时间:2013-01-25 05:01:19

标签: java precision bigdecimal decimal-point

我正在使用 BigDecimal 来获取一些价格值。要求是这样的,无论我们从数据库获取什么值,显示的值应该有2个小数点。

例如:

  

取值为1 - 应显示为1.00
  取值为1.7823 - 应显示为1.78

我正在使用setScale(2, BigDecimal.ROUND_HALF_UP),但仍有一些地方,如果来自数据库的数据是一个整数,那么显示相同!!

我的意思是如果DB的值为0,则仅显示为0。我希望它显示为0.00

由于

6 个答案:

答案 0 :(得分:43)

BigDecimal是不可变的,对它的任何操作,包括setScale(2,BigDecimal.ROUND_HALF_UP)都会产生一个新的BigDecimal。正确的代码应该是

        BigDecimal bd = new BigDecimal(1);
//      bd.setScale(2, BigDecimal.ROUND_HALF_UP);   bd.setScale does not change bd
        bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(bd);

输出

1.00

答案 1 :(得分:11)

您可以使用汇总格式

BigDecimal bd = new BigDecimal(2.22222);
System.out.println(bd.setScale(2,BigDecimal.ROUND_UP));

希望这对你有所帮助。

答案 2 :(得分:4)

要格式化JAVA中的数字,您可以使用:

 System.out.printf("%1$.2f", d);

其中d是您的变量或数字

 DecimalFormat f = new DecimalFormat("##.00");  // this will helps you to always keeps in two decimal places
 System.out.println(f.format(d)); 

答案 3 :(得分:2)

您需要使用具有适当区域设置的NumberFormat之类的内容format

NumberFormat.getCurrencyInstance().format(bigDecimal);

答案 4 :(得分:1)

BigDecimal.setScale可以工作。

答案 5 :(得分:0)

以下代码可能会有所帮助。

protected String getLocalizedBigDecimalValue(BigDecimal input, Locale locale) {
    final NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
    numberFormat.setGroupingUsed(true);
    numberFormat.setMaximumFractionDigits(2);
    numberFormat.setMinimumFractionDigits(2);
    return numberFormat.format(input);
}