Java 将货币解析为双重提升异常
我有一个字符串“R$3.333,33”,我试图用这个方法将它解析为一个双精度值: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
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,]”,“”)
。