首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用符号解析货币:并不是所有的案例都有效- Java

使用符号解析货币:并不是所有的案例都有效- Java
EN

Stack Overflow用户
提问于 2013-10-21 07:53:45
回答 2查看 2.2K关注 0票数 3

我使用java.text.NumberFormat来解析具有货币符号的字符串货币。它在某些情况下起作用,而对另一些情况则失败。

代码语言:javascript
复制
NumberFormat.getCurrencyInstance(Locale.FRANCE).parse("1 599,99 €"); //fails
NumberFormat.getCurrencyInstance(Locale.FRANCE).parse("599,99 €"); //works fine

有人能解释一下为什么它在第一种情况下不起作用吗?Joda-Money是这类解析的更好的库吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-21 08:15:56

这可能不适用于您,原因是无效空格字符的使用。

格式类期望使用代码160女巫的字符被描述为“非破缺空间”,当您传递代码30时,字符是“空格”。

您可以运行此代码来检查它。

代码语言:javascript
复制
NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.FRANCE);

String france = "1 599,99 €";
String format = currencyInstance.format(1599.99);
Number number = currencyInstance.parse(format);


System.out.println("France: " + format);
System.out.println("Format: " + format);
System.out.println("Number: " + number);

if(france.equals(format)) {
    number = currencyInstance.parse(france); // Must work;
    System.out.println(number);
} else {

    char[] fr = france.toCharArray();
    char[] ft = format.toCharArray();

    for(int i = 0; i < fr.length; i++) {
        if(fr[i] != ft[i]) {
            System.out.printf("The value on position %d are not equal. France: %d; Format: %d", i,(int)fr[i], (int)ft[i]);
        }
    }

}

然后是环境细节:

代码语言:javascript
复制
 java version "1.7.0_17"
 Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
 Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
 OS: Windows 7 64-bits. 

ASCII表

注意:

正如@Black Panter补充的那样,这是已知的bug

JDK-4510618:[Fmt-Nu]法国数千分离器是不间断的空间。

周旋 (1)删除要解析的字符串中的用户分组分隔符(即U+0020)。 (2)如果删除所有空格不方便,用格式化程序的分组分隔符(U+00A0)替换用户的分组分隔符。

票数 3
EN

Stack Overflow用户

发布于 2013-10-21 08:06:55

这是因为您的数字1 599中的空格,它将抛出一个ParseException删除空间,它将像一个魅力一样工作。

但是,它不应该抛出异常,因为文档声明

如果可能,返回一个长(例如,在范围Long.MIN_VALUE、Long.MAX_VALUE和没有小数的范围内),否则返回双倍。如果设置了IntegerOnly,则在小数点处停止(或等效;例如,对于有理数"1 2/3",则在1之后停止)。不会抛出异常;如果不能解析对象,则将保持索引不变!

我刚刚发现这个链接状态是关于一个与此相关的bug。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19488923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档