我有一个字符串是" 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)
答案 0 :(得分:2)
我找到的唯一解决方案是在你的正则表达式中替换.
:
return (BigDecimal) format.parse(amount.replaceAll("[^\\d,]",""));
我已经无法用数千.
解析一个数字。
.
,则会将其解析为3
。.
替换为,
,则会将其解析为3.333
。如果有人有成千上万的{{1}}解决方案,我真的很想听听它。
答案 1 :(得分:0)
虽然看起来像重复,但如果输入为“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>-->