Numberformat.parse在java

时间:2016-04-14 03:56:23

标签: java number-formatting

在我的代码中,我获取了区域设置值并在下面的代码片段中使用它:

    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 个答案:

答案 0 :(得分:2)

您要解析字符串,即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'而对于英国而言,1000' 1000,意味着在法国,他们使用空间(注意它不是我们可以通过''而不是逗号指定的相同空间)分开千万。

在您的情况下,由于输入是数字的字符串表示形式,即1,000.00',这意味着它的区域设置是特定的,您需要使用正确的区域设置格式来解析它。这意味着您的应用程序应该从上下文中了解它的区域设置。通常,NumberFormat类将使用默认语言环境,具体取决于您运行此应用程序的位置,并且在大多数情况下,这是足够的。

您需要提供有关您尝试执行的操作的详细信息以及您收到字符串作为输入的原因。

<强>更新

试试这个:

DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.UK);
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setDecimalFormatSymbols(dfs);

System.out.println(decimalFormat.parse("1,000"));