2012-08-06 58 views
3

我有一个999,999,999,999,999.999的十进制数字作为字符串,我需要删除这些逗号。为此,我使用以下代码 -在java中解析大数字以删除逗号而不降低精度

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()将“,”替换为“”让我想起来,但如果可能的话,我想用数字来做。

在此先感谢。

回答

8

当您通过.doubleValue()时,您将失去精确度。

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

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