Numberformat.parse 在java中的法语语言环境中无法正常工作
Posted
技术标签:
【中文标题】Numberformat.parse 在java中的法语语言环境中无法正常工作【英文标题】:Numberformat.parse not working correctly for french locale in java 【发布时间】:2016-04-14 03:56:23 【问题描述】:在我的代码中,我正在获取语言环境值并在下面的代码 sn-p 中使用它:
NumberFormat nf = NumberFormat.getInstance(locale);
double value = nf.parse(input).doubleValue();
对于 en_gb 语言环境和 fr_fr 语言环境,提供的输入相同,即 1,000.00。 但是“值”对于 en_gb 语言环境是 1000.0,对于 fr_fr 语言环境是 1.0。
确实尝试在以下帖子中搜索解决方案: 1]NumberFormat.parse() does not work for FRANCE Locale space as thousand seperator 2]http://bugs.java.com/view_bug.do?bug_id=6318800
但没有运气。对此的任何想法/指示都会非常有帮助。
【问题讨论】:
【参考方案1】:您正在解析一个字符串,即“1,000.00”。问题是,在法国语言环境中,数字 1000 的正确格式是“1 000”。这就是你最终得到“1”输出的原因。
一个简单的例子是:
NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE);
double d = 1000.00;
System.out.println(nf.format(d));
NumberFormat nf1 = NumberFormat.getInstance(Locale.UK);
System.out.println(nf1.format(d));
法国的输出是“1 000”,而英国的输出是“1,000”,这意味着在法国,他们使用空格(注意它与我们可以通过“”指定的空格不同)而不是逗号来分隔千位。
在您的情况下,由于输入是数字的字符串表示形式,即“1,000.00”,这意味着它是特定于语言环境的,您需要使用正确的语言环境格式来解析它。这意味着您的应用程序应该从上下文中了解它的语言环境。通常NumberFormat
类将只使用默认语言环境,具体取决于您运行此应用程序的位置,在大多数情况下,这就足够了。
您确实需要提供更多详细信息,说明您尝试执行的操作以及接收字符串作为输入的原因。
更新
试试这个:
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.UK);
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setDecimalFormatSymbols(dfs);
System.out.println(decimalFormat.parse("1,000"));
【讨论】:
柯强您好,非常感谢您的详细解释。有关如何解决此问题的任何想法/指示都会有所帮助。 你好,克强。详细信息如下:输入将始终为字符串输入[即 1,000.00]。我们有一个网站,在每个页面[比如说 en_gb] 中,此输入用于以格式显示 [即 EUR 1000.00m]。但是由于这个问题,在法语页面上,它出现了 [即 1 亿欧元]。我们需要这些数据以与它在其他页面中出现的方式相同的方式出现[比如 en_gb]。 柯强,您好,补充一下。输入将始终是字符串输入,其他页面 [比如说 en_gb] 以及 fr_fr 页面的显示应该相同。 @askdctm 那么,为什么这个输入字符串使用逗号来分隔千位呢?如果总是这样,您可以将NumberFormat
的语言环境明确指定为“UK”,以便正确解析。
@askdctm BTW,在法国,逗号用来表示小数位,所以“1,000”表示“1”。以上是关于Numberformat.parse 在java中的法语语言环境中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 JNI 在 C 中访问 Java 对象中的 Java 对象