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 对象

ctmp在java中的用法?

在java中,啥是队列?

java文件在eclipse中可以运行,在cmd中javac命令运行正确,java命令报错

在java中怎样在有名包中引用无名包中的类

在java中,啥是接口,接口的特点是啥