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

use*_*730 27 java precision decimal-point bigdecimal

我使用BigDecimal来获得一些价格值.要求是这样的,我们从数据库获取的值,显示的值应该有2个小数点.

例如:

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

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

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

谢谢

Evg*_*eev 44

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);
Run Code Online (Sandbox Code Playgroud)

产量

1.00
Run Code Online (Sandbox Code Playgroud)

  • 我认为他的意思是“这不会改变 bd”。第二行不是必须的 (4认同)
  • 自Java 9以来不推荐使用`.setScale(2,RoundingMode.HALF_UP);` (3认同)

cor*_*rin 11

你可以使用舍入格式

BigDecimal bd = new BigDecimal(2.22222);
System.out.println(bd.setScale(2,BigDecimal.ROUND_UP));
Run Code Online (Sandbox Code Playgroud)

希望这对你有所帮助.


Ari*_*ara 5

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

 System.out.printf("%1$.2f", d);
Run Code Online (Sandbox Code Playgroud)

d是您的变量或数字

要么

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

  • 最好使用 ```new DecimalFormat("##0.00");```,因为用 ```##.00``` 表示 ```0``` 你会得到 ```.00`` ` 而不是 ```0.00``` (2认同)

kos*_*osa 2

您需要使用类似NumberFormat适当区域设置的内容来格式化

NumberFormat.getCurrencyInstance().format(bigDecimal);
Run Code Online (Sandbox Code Playgroud)

  • 这将打印货币符号,例如 $,以及数字,OP 没有提到他想要的。但就像在这里使用货币实例以提高可读性的想法一样。 (3认同)