我正在使用BigDecimal来获取一些价格值。要求是这样的,无论我们从数据库中获取什么值,显示的值都应该有 2 个小数点。
例如:
提取值为 1 - 应显示为 1.00
提取值为 1.7823 - 应显示为 1.78
我正在使用setScale(2, BigDecimal.ROUND_HALF_UP)
但仍有一些地方,如果来自 DB 的数据是整数,则显示相同的数据!
我的意思是如果数据库中的值为 0,则它仅显示为 0。我希望它显示为 0.00
谢谢
我正在使用BigDecimal来获取一些价格值。要求是这样的,无论我们从数据库中获取什么值,显示的值都应该有 2 个小数点。
例如:
提取值为 1 - 应显示为 1.00
提取值为 1.7823 - 应显示为 1.78
我正在使用setScale(2, BigDecimal.ROUND_HALF_UP)
但仍有一些地方,如果来自 DB 的数据是整数,则显示相同的数据!
我的意思是如果数据库中的值为 0,则它仅显示为 0。我希望它显示为 0.00
谢谢
BigDecimal 是不可变的,包括 setScale(2, BigDecimal.ROUND_HALF_UP) 在内的任何操作都会产生一个新的 BigDecimal。正确的代码应该是
BigDecimal bd = new BigDecimal(1);
bd.setScale(2, BigDecimal.ROUND_HALF_UP); // this does change bd
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bd);
输出
1.00
注意 - 由于 Java 9BigDecimal.ROUND_HALF_UP
已被弃用,您现在应该使用RoundingMode.ROUND_HALF_UP
.
您可以使用向上取整格式
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 会工作。
下面的代码可能会有所帮助。
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);
}