从webelement读取字符串并将其转换为小数



有一种情况是我从webelement读取货币,它是一个字符串。需要将其转换为数字格式以进行某些损益计算。

尝试了以下代码

public class NumberFormat {
public static void main(String[] args) {
//String str = "$9.9967";
String str1 = "€12,32123";
String str2 = "€3.452,35";
str1 = str1.replace(",", ".").replace(".", "").replaceAll("[^0-9.]", "");
str2 = str2.replace(",", ".").replace(".", "").replaceAll("[^0-9.]", "");
double str1Ch = Double.parseDouble(str1);
double str2Ch = Double.parseDouble(str2);
System.out.println(str1Ch);
System.out.println(str2Ch);
}
}

实际结果:

1232123.0
345235.0

预期成果:

12.32123
3452.35

我没有得到我所期望的,我需要同时执行两个转换(点到空/空,逗号到点(

需要知道代码不起作用的原因,以及读取不同国家货币并将其转换为数字格式的任何建议。

其中一个选项可能是创建自己的NumberFormat(此处基于DecimalFormat(。您可以使用DecimalFormatSymbols设置其小数分隔符或分组分隔符符号。

演示:

DecimalFormat df = new DecimalFormat("€#,###.#");
DecimalFormatSymbols dfSymbols = new DecimalFormatSymbols();
dfSymbols.setDecimalSeparator(',');
dfSymbols.setGroupingSeparator('.');
df.setDecimalFormatSymbols(dfSymbols);
String str1 = "€12,32123";
String str2 = "€3.452,35";
double str1Ch = df.parse(str1).doubleValue();
double str2Ch = df.parse(str2).doubleValue();
System.out.println(str1Ch);//12.32123
System.out.println(str2Ch);//3452.35

你混淆了符号逗号和句点的替换。

即首先用空字符串替换句点,然后用句点替换逗号。如下图所示。

str1 = str1.replace(".", "").replace(",", ".").replaceAll("[^0-9.]", "");
str2 = str2.replace(".", "").replace(",", ".").replaceAll("[^0-9.]", "");

您可以使用NumberFormat

String s1 = "€3.452,35";
Locale locale = null;
switch (s1.charAt(0)) {
case '€':
locale = Locale.FRANCE;
break;
case '$':
locale = Locale.US;
break;
//Add any other money you want
default:
//Money unexpected
}
s1 = s1.substring(1, s1.length())
.replaceAll("[. ]", "")
.replaceAll(",", ".");
System.out.println(s1);
NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
System.out.println(nf.format(new BigDecimal(s1)));

最新更新