java - 解析大数字以删除逗号而不丢失 java 中的精度

标签 java

我有一个十进制数字 999,999,999,999,999.999 作为字符串,我需要从中删除逗号。为此,我使用以下代码 -

new BigDecimal(NumberFormat.getInstance().parse("999,999,999,999,999.999")
                      .doubleValue()).setScale(3,BigDecimal.ROUND_HALF_UP);

但这给了我四舍五入的值 1000000000000000.000。但是我想要的是999999999999999.999。谁能告诉我如何在不损失精度的情况下用 Java 完成这项工作。不可能有什么替代方法可以做到这一点。

我想到了在 String 上使用 replaceAll() 将“,”替换为“”,但如果可能的话我想用数字来完成。

提前致谢。

最佳答案

当你通过 .doubleValue() 时你失去了精度。

您需要立即将其存储为 BigDecimal。我建议你使用 DecimalFormatsetParseBigDecimal为真。

DecimalFormat nf = new DecimalFormat("###,###.###");
nf.setParseBigDecimal(true);
BigDecimal bd = ((BigDecimal) nf.parse("999,999,999,999,999.999"))
                        .setScale(3,BigDecimal.ROUND_HALF_UP);

System.out.println(bd);  // 999999999999999.999

关于java - 解析大数字以删除逗号而不丢失 java 中的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11823504/

相关文章:

java - 如何在没有ImageView的TextView中间添加图像到TextView

java - 使用 Java 中的正则表达式计算文本文件中模式的出现次数

java - 在 Java 中使用 EntityManager 返回计数 native 查询的结果?

java - 用于 Java 桌面应用程序的最佳数据库是什么

java - 在 Java 中,为什么数组不能是类型变量的边界,但可以是通配符的边界?

java - 在 Java 启动时加载 DLL

java - 递归回调虚拟方法

java - 为什么 <? extends Number> 不适用于 Integer?

java - 在 Windows 下的 java 中,如何找到重定向的桌面文件夹?

java - 使用 Spring 的事务管理器进行回滚