如何使用 BigDecimal 显示始终有 2 个小数点的数字?
Posted
技术标签:
【中文标题】如何使用 BigDecimal 显示始终有 2 个小数点的数字?【英文标题】:How to display a number with always 2 decimal points using BigDecimal? 【发布时间】:2013-01-25 05:01:19 【问题描述】:我正在使用 BigDecimal 来获取一些价格值。要求是这样的,无论我们从数据库中获取什么值,显示的值都应该有 2 个小数点。
例如:
获取的值为 1 - 应显示为 1.00 获取的值为 1.7823 - 应显示为 1.78
我正在使用setScale(2, BigDecimal.ROUND_HALF_UP)
,但仍有一些地方,如果数据库中的数据是整数,那么会显示相同的数据!!
我的意思是如果数据库中的值为 0,则它仅显示为 0。我希望它显示为 0.00
谢谢
【问题讨论】:
我想你可以在这里找到答案:***.com/a/50543/61624 感谢 daniel :) 回复太快了.. 但我已经在使用带有 setscale(2) 的 bigdecimal.round_half_up,当你有 2.12 或 4.2343 之类的数字时它可以工作。当值是像 2 这样的整数时,我希望它显示为 2.00,这就是我失败的地方! How do I format a number in java?的可能重复 【参考方案1】: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 9 BigDecimal.ROUND_HALF_UP
已被弃用,您现在应该使用 RoundingMode.ROUND_HALF_UP
。
【讨论】:
自 Java 9 起已弃用,请使用.setScale(2, RoundingMode.HALF_UP);
【参考方案2】:
你可以使用向上取整的格式
BigDecimal bd = new BigDecimal(2.22222);
System.out.println(bd.setScale(2,BigDecimal.ROUND_UP));
希望对您有所帮助。
【讨论】:
【参考方案3】:要在 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));
【讨论】:
最好使用new DecimalFormat("##0.00");
,因为将##.00
用于0
你会得到.00
而不是0.00
【参考方案4】:
您需要使用 NumberFormat
之类的内容,并将适当的语言环境设置为 format
NumberFormat.getCurrencyInstance().format(bigDecimal);
【讨论】:
这将打印货币符号,例如$,以及 OP 没有提到他想要的号码。但就像为了可读性而在这里使用货币实例的想法一样。【参考方案5】:BigDecimal.setScale 可以工作。
【讨论】:
【参考方案6】:下面的代码可能会有所帮助。
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);
【讨论】:
以上是关于如何使用 BigDecimal 显示始终有 2 个小数点的数字?的主要内容,如果未能解决你的问题,请参考以下文章
格式化 BigDecimal 以使 100 显示为 100 而不是 1.0E+2