我正在使用 BigDecimal 来获取一些价格值。要求是这样的,无论我们从数据库获取什么值,显示的值应该有2个小数点。
例如:
取值为1 - 应显示为1.00
取值为1.7823 - 应显示为1.78
我正在使用setScale(2, BigDecimal.ROUND_HALF_UP)
,但仍有一些地方,如果来自数据库的数据是一个整数,那么显示相同!!
我的意思是如果DB的值为0,则仅显示为0。我希望它显示为0.00
由于
答案 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);
}