标签:
在讨论两位double数0.1和0.2相加时,毫无疑问他们相加的结果是0.2。但是问题总是如此吗?
下面我们让下面两个doubles数相加,然后看看输出结果:
@Test public void testBig(){ System.out.println(0.11+2001299.32); }
控制台输出2001299.4300000002
我们吃惊的发现,结果并不是我们预想的那样,这是为什么呢?又如何解决呢?
现贴出BigDecimal的一个构造函数的文档供大家参考
public BigDecimal(double val)
注:
Double.toString(double)
方法,然后使用 BigDecimal(String)
构造方法,将 double 转换为 String。要获取该结果,请使用 static valueOf(double)
方法。
val
- 要转换为 BigDecimal 的 double 值。NumberFormatException
- 如果 val 为无穷大或 NaN。解决方法:
相信从上面的文档大家也已经找出了解决方法,
在需要精确的表示两位小数时我们需要把他们转换为BigDecimal对象,然后再进行运算。
另外需要注意,使用BigDecimal(double val)构造函数时仍会存在精度丢失问题,建议使用BigDecimal(String val),这就
需要先把double转换为字符串然后在作为BigDecimal(String val)构造函数的参数。转换为BigDecimal对象之后再进行加减乘除操作精度就不
会出现问题了。这也是为什么有关金钱数据存储都使用BigDecimal。
了解BigDecimal如何进行运算,请如下中文文档
http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/math/BigDecimal.html
标签:
原文地址:http://www.cnblogs.com/cblogs/p/double-precision.html