解析货币以加倍例外

时间:2016-10-17 23:22:35

标签: java android parsing currency

我有一个字符串是" R $ 3.333,33"并且我尝试使用此方法将其解析为double值:

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)

3 个答案:

答案 0 :(得分:2)

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

return (BigDecimal) format.parse(amount.replaceAll("[^\\d,]",""));

我已经无法用数千.解析一个数字。

  • 如果您保留.,则会将其解析为3
  • 如果您将.替换为,,则会将其解析为3.333

如果有人有成千上万的{{​​1}}解决方案,我真的很想听听它。

答案 1 :(得分:0)

看看this question and answer

虽然看起来像重复,但如果输入为“R $ 3.333,33”(注意货币符号和值之间的空格),则 parsedData.foreach( new VoidFunction<Vector>() { @Override public void call(Vector vector) throws Exception { System.out.println(clusters.predict(vector)); } } ); 方法有效。

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

parse

答案 2 :(得分:-2)

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

<?xml version="1.0" encoding="utf-8"?>
<!--<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">-->

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/templateList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        />
<!--</LinearLayout>-->