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

时间:2012-08-06 06:33:43

标签: 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()替换“,”替换为“”,但我想在可能的情况下使用数字。

提前致谢。

1 个答案:

答案 0 :(得分:8)

当您经过.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