我的百分比被默认的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;
david a... 52
看起来像这样:
String actualResult = MessageFormat.format("{0,number,#.##%}", fraction);
... 工作中.
编辑:要查看#和%的解释,请参阅java.text.DecimalFormat的javadoc.
编辑2:是的,国际化是安全的.格式字符串中的点被解释为小数点分隔符,而不是硬编码点.:-)
看起来像这样:
String actualResult = MessageFormat.format("{0,number,#.##%}", fraction);
... 工作中.
编辑:要查看#和%的解释,请参阅java.text.DecimalFormat的javadoc.
编辑2:是的,国际化是安全的.格式字符串中的点被解释为小数点分隔符,而不是硬编码点.:-)
我认为正确的方法如下:
NumberFormat percentFormat = NumberFormat.getPercentInstance(); percentFormat.setMaximumFractionDigits(1); String result = percentFormat.format(0.125);
它还考虑了内部化.例如,在我的匈牙利语语言环境的机器上,我得到了"12,5%".初始化percentFormat NumberFormat.getPercentInstance(Locale.US)
当然会给出"12.5%".
怎么样
DecimalFormat f = new DecimalFormat( "###.#" ); System.out.println( f.format( 12.5 ) );
char'#'格式不打印0表示不存在.所以12.5 - >"12.5",12.0 - >"12",而不是"12.0".您当然可以使用例如"###,###.##"来设置格式化程序,只有在您需要精度时才会显示hundreths位置.