作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何使用 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/
我是一名优秀的程序员,十分优秀!