如何格式化给定语言环境的双精度值和小数位数?

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

我相信这就是你要找的东西,而且你不必弄乱模式.我不会这样做 - 例如,有一些区域设置将数字组合为两个,而不是三组(这就是我们讨论分组分隔符不是 数千个分隔符的原因).


COD*_*BOY 8

改编自定制格式,

  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)

此功能应该为您提供所需的格式.