黑马程序员技术交流社区
标题:
关于损失精度的问题。
[打印本页]
作者:
段玉磊
时间:
2012-7-27 22:53
标题:
关于损失精度的问题。
本帖最后由 段玉磊 于 2012-7-27 22:56 编辑
1.
public static void main(String[] args) {
double rel = 2.0 - 1.9;
System.out.println(rel);
}
[size=11.000000pt]
答案是:
0.10000000000000009 为什么最后数字是一个9?
2.
public static void main(String[] args) {
double b = 2.0 - 1.1;
System.out.println( b );
}
复制代码
答案是 : 0.8999999999999999 为什么? 为什么不等于 0.9 ? 精度是如何损失的?
作者:
乐峰
时间:
2012-7-27 23:06
本帖最后由 聂峰 于 2012-7-28 09:02 编辑
Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。
Java中,浮点类型是依据IEEE754标准的。IEEE754定义了32位和64位双精度两种浮点二进制小数标准。采用二进制表示double,float等浮点数是不准确的。
作者:
李菁
时间:
2012-7-27 23:08
这种状况是因为二进制存储浮点数的原因所造成的
作者:
黄锐
时间:
2012-7-27 23:16
很多小数 计算机无法准确表示的.
比如0.1, 用二进制表示是0.00011001100110011.....
0.2 用二进制表示是0.00110011001100110.....
0.3 用二进制表示是0.01001100110011001.....
0.4 用二进制表示是0.01100110011001100.....
0.5 用二进制表示是0.1
计算机给分配的存储空间是有限的,double是8字节。所以没有办法精准表示。造成上述问题。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2