我想将一个可能以货币符号为前缀的 Decimal 值转换为仅数值。
例如-
该值可以像以下任何一个
String s1 = "£32,847,676.65";
String s2 = "£3,456.00";
String s3 = "£831,209";
我希望转换后的结果类似于 - 32847676.65
、3456.00
和 831209
。
我尝试以这种方式使用 NumberFormat 的 parse()
方法 -
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.UK);
numberFormat.setMinimumFractionDigits(2);
Number num = nf.parse(s1);
double dd = num.doubleValue();
BigDecimal gg = new BigDecimal(dd);
System.out.println(gg);
但结果是 - 32847676.649999998509883880615234375
这并不完全正确。
我需要它是数字,以便我可以执行某种计算。
你们能指导我还有什么我可以尝试的吗
最佳答案
您已经正确解析了该值。问题是这样的:
BigDecimal gg = new BigDecimal(dd);
您将值转换为 BigDecimal, double 的舍入问题会考虑点后的小数位。使用:
BigDecimal gg = new BigDecimal(dd).setScale(2);
或
BigDecimal gg = new BigDecimal(dd).setScale(2,RoundingMode.HALF_UP);
关于java - 使用 NumberFormat 将带有货币符号的数值转换回 Decimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485020/