我使用的BigDecimal获得一些价格值。 需求是这样的,什么都值,我们从数据库中获取,显示的价值应该有2个小数点。
例如:
取出的值是1 - 应显示为1.00
获取的值是1.7823 - 应显示为1.78
我使用setScale(2, BigDecimal.ROUND_HALF_UP)
但仍有些地方,如果从数据库中的数据是否相同正在显示一个整数!
我的意思是,如果该值从DB其显示为只有0。 我想,要显示为0.00
谢谢
我使用的BigDecimal获得一些价格值。 需求是这样的,什么都值,我们从数据库中获取,显示的价值应该有2个小数点。
例如:
取出的值是1 - 应显示为1.00
获取的值是1.7823 - 应显示为1.78
我使用setScale(2, BigDecimal.ROUND_HALF_UP)
但仍有些地方,如果从数据库中的数据是否相同正在显示一个整数!
我的意思是,如果该值从DB其显示为只有0。 我想,要显示为0.00
谢谢
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
您可以使用围捕格式
BigDecimal bd = new BigDecimal(2.22222);
System.out.println(bd.setScale(2,BigDecimal.ROUND_UP));
希望这帮助你。
格式化数字在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));
你需要使用类似NumberFormat
用相应的语言环境来格式化
NumberFormat.getCurrencyInstance().format(bigDecimal);
性BigDecimal.setScale会工作。