java - 使用 NumberFormat 将带有货币符号的数值转换回 Decimal

标签 java

我想将一个可能以货币符号为前缀的 Decimal 值转换为仅数值。
例如-
该值可以像以下任何一个

String s1 = "£32,847,676.65";
String s2 = "£3,456.00";
String s3 = "£831,209";

我希望转换后的结果类似于 - 32847676.653456.00831209
我尝试以这种方式使用 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/

相关文章:

java - 从 html 获取链接返回重复链接的方法

java - JAX-RS 如何编写响应

java - Kotlin 中的线程同步是如何工作的?

java - 从模拟器读取短信

java - HttpURLConnection 总是失败并显示 401

java - Swing 应用程序实现可运行 - 不使用局部变量

java - PayPal:替代 ConfigManager.getInstance().load()

java - 使用 alpha 渐变将位图绘制到 Canvas

java - java 10 的 aspectj-maven-plugin compilanceLevel

java - 在java中压缩整数数组