<分区>
我有一次将货币作为字符串获取,例如:
199.00 美元
399,00 雷亚尔
25.00 英镑
90,83 欧元
449.00 迪拉姆
我如何在 java 中将这些货币转换为双倍?
<分区>
我有一次将货币作为字符串获取,例如:
199.00 美元
399,00 雷亚尔
25.00 英镑
90,83 欧元
449.00 迪拉姆
我如何在 java 中将这些货币转换为双倍?
最佳答案
切勿使用 double
表示确切的金额
当然可以,但是你需要really understand floating point arithmetic
使用NumberFormat
。虽然它确实处理某些 货币,但通常更容易去除所有货币符号。 NumberFormat
将使用 Locale
来计算要使用的分隔符:
public static BigDecimal parse(final String amount, final Locale locale) throws ParseException {
final NumberFormat format = NumberFormat.getNumberInstance(locale);
if (format instanceof DecimalFormat) {
((DecimalFormat) format).setParseBigDecimal(true);
}
return (BigDecimal) format.parse(amount.replaceAll("[^\\d.,]",""));
}
这需要金额的 String
和 Locale
。然后它创建一个 BigDecimal
解析 NumberFormat
实例。它使用 replaceAll
和正则表达式从数字中去除除数字 .
和 ,
之外的所有内容,然后对其进行解析。
针对您的示例的快速演示:
public static void main(String[] args) throws ParseException {
final String dollarsA = "$199.00";
final String real = "R$ 399,00";
final String dollarsB = "£25.00";
final String tailingEuro = "90,83 €";
final String dollarsC = "$199.00";
final String dirham = "AED 449.00";
System.out.println(parse(dollarsA, Locale.US));
System.out.println(parse(real, Locale.FRANCE));
System.out.println(parse(dollarsB, Locale.US));
System.out.println(parse(tailingEuro, Locale.FRANCE));
System.out.println(parse(dollarsC, Locale.US));
System.out.println(parse(dirham, Locale.US));
}
输出:
199.00
399.00
25.00
90.83
199.00
449.00
我简单地使用了 US
,其中小数点是 .
和 FRANCE
,其中小数点是 ,
但你如果您愿意,可以为货币使用正确的 Locale
。
关于java - 使用java将不同国家的货币转换为双倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990805/