java - 如何为给定的语言环境和小数位数格式化 double 值?

标签 java number-formatting

如何使用 NumberFormat 为给定的 Locale(默认语言环境就足够了)和给定的数量格式化 double 值小数位?

例如,我有这些值:

double d1 = 123456.78;
double d2 = 567890;

我想以下列方式打印它们,例如使用美国语言环境和 2 位小数:

123,456.78
567,890.00

在这种情况下我实际上并不关心舍入模式,因为这些 double 值是从具有给定比例的 BigDecimal 获得的,因此它们的小数位数总是小于或等于我要打印的小数位数。

编辑:

为了让事情更清楚一点,问题是我想以依赖于区域设置的方式显示货币,但小数位数是固定的。上面的示例显示,如果系统区域设置为 en_US,应如何格式化这些值。现在让我们说,系统区域设置是 cs_CZ(捷克语),所以相同的数字应该以这种方式格式化:

123 456,78
567 890,00

现在,如何将 NumberFormat 设置为始终显示 2 位小数,但根据当前语言环境显示千位分隔符和小数点?

最佳答案

如果您愿意阅读 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());

在我的机器上打印出:

123 456,78
567 890,00
pl-PL

我相信这就是您要找的东西,而且您不必弄乱模式。我不会那样做 - 例如有些语言环境将数字按两个而不是三个分组(这就是我们谈论分组分隔符 的原因千位分隔符)。

关于java - 如何为给定的语言环境和小数位数格式化 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411414/

相关文章:

Python程序根据给定值添加小数点

java - 使用 Java 8 Streams 最大化并行度

java - 识别内置功能接口(interface)

MYSQL 查询 - 使用格式但没有逗号

java - 显示数字小数部分的问题

c# - 从指数表示法解析数字

java - 降低功耗

java - Spark 2.6.0 : Exception in thread "main" java. lang.ClassNotFoundException: <Main Class> 当 <Main Class> 位于提交到集群的 jar 中时

java - Retrofit 2 中是否有 RequestInterceptor 的替代品?

java - 关于NumberFormatter的一个问题