Nat*_*tix 14 java number-formatting
我如何使用NumberFormat格式化double给定的值Locale(默认语言环境就足够了)和给定的小数位数?
例如,我有以下值:
double d1 = 123456.78;
double d2 = 567890;
Run Code Online (Sandbox Code Playgroud)
我想以下列方式打印它们,例如使用美国语言环境和2个小数位:
123,456.78
567,890.00
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我实际上并不关心舍入模式,因为这些双值是从BigDecimal给定比例的a 获得的,因此它们的小数位数总是小于或等于我想要打印的小数位数.
编辑:
为了使事情更清楚,问题是我想以依赖于语言环境的方式显示钱,但是具有固定数量的小数位.上面的示例显示了如果系统区域设置是如何格式化值en_US.现在假设,系统区域设置是cs_CZ(捷克语),因此应以这种方式格式化相同的数字:
123 456,78
567 890,00
Run Code Online (Sandbox Code Playgroud)
现在,如何设置NumberFormat以始终显示2个小数位,但是根据当前区域设置显示千位分隔符和小数点?
Paw*_*yda 41
如果您想阅读NumberFormat的文档,解决方案将是显而易见的:
double d1 = 123456.78;
double d2 = 567890;
// self commenting issue, the code is easier to understand
Locale fmtLocale = Locale.getDefault(Category.FORMAT);
NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
System.out.println(formatter.format(d1));
System.out.println(formatter.format(d2));
System.out.println(fmtLocale.toLanguageTag());
Run Code Online (Sandbox Code Playgroud)
在我的机器上打印出:
123 456,78
567 890,00
pl-PL
我相信这就是你要找的东西,而且你不必弄乱模式.我不会这样做 - 例如,有一些区域设置将数字组合为两个,而不是三组(这就是我们讨论分组分隔符而不是 数千个分隔符的原因).
改编自定制格式,
public void localizedFormat(double value,Locale loc ) {
NumberFormat nf = NumberFormat.getNumberInstance(loc);
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern("###,###.00");
String output = df.format(value);
}
Run Code Online (Sandbox Code Playgroud)
此功能应该为您提供所需的格式.