我正在使用 java.text.MessageFormat
替换显示单位价格的模板中的占位符。下面是一段代码。
public String format(Object[] arguments, String pattern) {
MessageFormat formatter = new MessageFormat("");
formatter.applyPattern(pattern);
return formatter.format(arguments);
}
``` `pattern` 是
{0}{1}每{2}
以及 `arguments` 是
参数[0]=“usd”,参数[1]=bigdecimal(0.0002),参数[2]=“shirt”
我希望格式化程序输出
“每件衬衫0.0002美元”
但是格式化程序正在降低精度并产生
“每件衬衫0美元”
看起来像 `MessageFormat` “只考虑小数点后的3位数。”bigdecimal(0.01)”按预期工作。
那么,有什么属性我可以调整来告诉 `MessageFormat` 它应该使用一定的精度?更改 `pattern` 不是我的选择。
我可以把论点转换成 `String` 从 `BigDecimal` 格式化前。但那将是我最后的选择。
编辑:小数点后3位的限制来自 `NumberFormat` .
private int maximumFractionDigits = 3;
有没有方法可以更改此值并使messageformat使用此值?
1条答案
按热度按时间8wigbo561#
可以使用以下格式
{0,number,#.##}
在模式中。如果您感兴趣,messageformat的javadoc会提供更多详细信息。因为您无法更改模式,所以将对象转换为字符串是唯一的解决方案
编辑:实际上我没有意识到格式可以通过编程设置:
应打印:
USD 0.0002 per shirt