Mar*_*nes 8 java locale decimal-point number-formatting
我正在开展一个国际项目,并且观察到,在Java中,小数分隔符的选择基于Locale的语言,而不是其国家.例如:
DecimalFormat currencyFormatter = (DecimalFormat) NumberFormat.getInstance(new Locale("it","IT"));
System.out.println(currencyFormatter.format(-123456.78));
currencyFormatter = (DecimalFormat) NumberFormat.getInstance(new Locale("en","IT"));
System.out.println(currencyFormatter.format(-123456.78));
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
-123.456,78
-123,456.78
Run Code Online (Sandbox Code Playgroud)
我原以为它会跟随这个国家,因为如果我在国内,无论我说英语还是意大利语,那个国家的数字都用小数点分隔符作为逗号.
我的问题是双重的:
谢谢.
很可能你的系统上没有已知的"en_IT"语言环境,并且Java知道没有这样的语言环境.
因此,您将获得最接近匹配的Locale的资源,如以下JavaDoc中的Locale注释:
当您要求特定区域设置的资源时,您将获得最佳可用匹配,而不一定是您要求的.有关更多信息,请查看
ResourceBundle.
的相关文件ResourceBundle显示,全国单是从未尝试作为标识符找到一个给定的资源.仅使用语言,语言+国家和语言+国家+变体.
但如果你是一个住在意大利的英国人,你很可能仍然用英语写数字,并在脑子里用英镑数你的钱 - 反之亦然;-)
所以对我来说,这种行为看起来完全合乎逻辑。我担心可能没有办法得到你想要的:-(
根据 Oscar Reyes 的评论进行更新:在 Java 6 中,NumberFormatProvider 使您能够实现您的目标。
| 归档时间: |
|
| 查看次数: |
15118 次 |
| 最近记录: |