如何使用 java.text.MessageFormat 格式化小数百分比

2022-09-01 06:20:17

我的百分比被默认的java.text.MessageFormat函数截断,如何在不损失精度的情况下格式化百分比?

例:

String expectedResult = "12.5%";
double fraction = 0.125;

String actualResult = MessageFormat.format("{0,number,percent}", fraction);
assert expectedResult.equals(actualResult) : actualResult +" should be formatted as "+expectedResult;

答案 1

我认为正确的方法是:

NumberFormat percentFormat = NumberFormat.getPercentInstance();
percentFormat.setMaximumFractionDigits(1);
String result = percentFormat.format(0.125);

它还考虑了内部化。例如,在我的带有匈牙利语区域设置的计算机上,我得到了“12,5%”,如预期的那样。当然,将 percentFormat 初始化为“12.5%”。NumberFormat.getPercentInstance(Locale.US)


答案 2

看起来像这样:

String actualResult = MessageFormat.format("{0,number,#.##%}", fraction);

...正在工作。

编辑:要了解如何解释 #和 %,请参阅 java.text.DecimalFormat 的 javadoc。

编辑2:而且,是的,它对于国际化是安全的。格式字符串中的点被解释为小数分隔符,而不是硬编码的点。:-)