我有一个场景,我把货币作为一个字符串,例如:
$ 199.00
R $ 399,00
£25.00
90,83€
AED 449.00
如何在java中将这些货币转换为双倍?
Bor*_*der 19
永远不要double用于表示确切的金额
嗯,当然你可以这样做,但你需要真正理解浮点运算
用一个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.,]",""));
}
Run Code Online (Sandbox Code Playgroud)
这需要一定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));
}
Run Code Online (Sandbox Code Playgroud)
输出:
199.00
399.00
25.00
90.83
199.00
449.00
Run Code Online (Sandbox Code Playgroud)
我只是使用US小数位数.和FRANCE小数位数,,但Locale如果您愿意,可以使用正确的货币.
| 归档时间: |
|
| 查看次数: |
9866 次 |
| 最近记录: |