Java 将货币解析为双重提升异常

Java 将货币解析为双重提升异常,java,android,parsing,currency,Java,Android,Parsing,Currency,我有一个字符串“R$3.333,33”,我试图用这个方法将它解析为一个双精度值: public static BigDecimal parse(final String amount, final Locale locale) throws ParseException { final NumberFormat format = NumberFormat.getCurrencyInstance(locale); if (format instanceof Deci

我有一个字符串“R$3.333,33”,我试图用这个方法将它解析为一个双精度值:

public static BigDecimal parse(final String amount, final Locale locale) throws ParseException {
        final NumberFormat format = NumberFormat.getCurrencyInstance(locale);
        if (format instanceof DecimalFormat) {
            ((DecimalFormat) format).setParseBigDecimal(true);
        }
        return (BigDecimal) format.parse(amount.replaceAll("[^\\d.,]", ""));
    }
但我得到一个例外,说:

W/System.err: java.text.ParseException: Unparseable number: "3.333,33" (at offset 8)
我使用它就像:

Ferramentas.parse(value.getText().toString(), Locale.FRANCE)
看一看

尽管它看起来像是重复的,
parse
方法在输入为“R$3.333,33”(注意货币符号和值之间的空格)时有效

要在货币符号和值之间插入空格,可以使用以下方法:

public static String insertSpaceBetweenSymbolAndValue(String s)
{
    int index = 0;
    while (index < s.length() && !Character.isDigit(s.charAt(index)))
        index++;
    return (index != s.length()) ? s.substring(0, index) + " " + s.substring(index) : s;
}
公共静态字符串insertSpaceBetweenSymbolAndValue(字符串s)
{
int指数=0;
while(索引
看一看

尽管它看起来像是重复的,
parse
方法在输入为“R$3.333,33”(注意货币符号和值之间的空格)时有效

要在货币符号和值之间插入空格,可以使用以下方法:

public static String insertSpaceBetweenSymbolAndValue(String s)
{
    int index = 0;
    while (index < s.length() && !Character.isDigit(s.charAt(index)))
        index++;
    return (index != s.length()) ? s.substring(0, index) + " " + s.substring(index) : s;
}
公共静态字符串insertSpaceBetweenSymbolAndValue(字符串s)
{
int指数=0;
while(索引
我找到的唯一解决方案是替换正则表达式中的

return (BigDecimal) format.parse(amount.replaceAll("[^\\d,]",""));
数千年来,我一直无法用
解析一个数字

  • 如果保留
    ,它将被解析为
    3
  • 如果将
    替换为
    ,它将被解析为
    3.333

如果有人能为数千人提供
解决方案,我真的很想听听。

我找到的唯一解决方案就是替换正则表达式中的

return (BigDecimal) format.parse(amount.replaceAll("[^\\d,]",""));
数千年来,我一直无法用
解析一个数字

  • 如果保留
    ,它将被解析为
    3
  • 如果将
    替换为
    ,它将被解析为
    3.333

如果有人能为数千人的
找到解决方案,我会非常感兴趣的。

为什么不删除'R$',然后解析你的double

String s = b.substring(3, b.length()); 
Double d = Double.valueOf(s);

为什么不删除'R$',然后解析double

String s = b.substring(3, b.length()); 
Double d = Double.valueOf(s);


你用的是哪种语言环境?@m0skit0我用的是Locale.france可能是@MarceloVinícius的副本,这个答案对
不起作用,它会打印
3
。你用的是哪种语言环境?@m0skit0我用的是Locale.france可能是@MarceloVinícius的副本,这个答案对
不起作用,它打印
3
。我如何在值和符号之间放置空格?@并且4011002849编辑了我的答案以包含这样的方法。从该答案开始,直到您添加
数千次。您是否保留
replaceAll()
?事实上,如果我保留
replaceAll()
,它不会被解析。我如何才能在值和符号之间放置空格?@并且4011002849编辑了我的答案以包含这样的方法。从该答案开始,直到您添加了数千个
。您是否保留
replaceAll()
?事实上,如果我保留
replaceAll()
,无法对其进行分析。他已在删除R$:
amount.replaceAll(“[^\\d,]”,“”)
。他已在删除R$:
amount.replaceAll(“[^\\d,]”,“”)