黑马程序员技术交流社区
标题:
Java中关于double类型的精度问题
[打印本页]
作者:
王光保
时间:
2011-7-22 15:08
标题:
Java中关于double类型的精度问题
写了一个关于double类型的数据运算问题,
public class Test{
public static void main(String args[]){
double a = 14.29;
System.out.println(14.29*1.1);
}
}
看看运行结果:15.719000000000001
用计算器运行的结果是:15.719
不知道是什么原因啊!
[
本帖最后由 wangguangbao 于 2011-07-22 15:33 编辑
]
作者:
匿名
时间:
2011-7-22 16:26
Double类型的toString方法有关吧
作者:
匿名
时间:
2011-7-22 16:47
很好的问题题,一起交流学习哈,我是这样理解的:
首先double本身就不精确,你看到14.29当在计算机里用二进制表示时,它只是无限接近14.29而已,这涉及到二进制小数位表示的方法:
小数部分:0.29 表示二进制方法
0.29*2=0.58 取0[取整数部分做为第一项]
0.58*2=1.06 取1
0.06*2=0.12 取0
0.12*2=0.24 取0
...... 直到值为0或形成循环小数则停止。
从上面可见,小数部分是取之不尽的,所以二进制不能正确表达这个小数部分,因此,它在计算机表示时本身就不是精确的,所以结果也就不精确了。这是所有程序语言都存在的问题,只是有些被封装了解决方法,所以结果是精确的。
在java中想计算精确得用这个类:BigDecimal
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2