黑马程序员技术交流社区

标题: 打印结果吓了我一跳,这是啥情况。。。 [打印本页]

作者: ok-Prince    时间: 2014-3-11 19:37
标题: 打印结果吓了我一跳,这是啥情况。。。
本帖最后由 ok-Prince 于 2014-3-11 21:07 编辑

class Cz1
{
   public static void main(String[] args)
        {
                System.out.println(5.0-2.1);
                System.out.println(2.0-1.1);
        }
}
为啥第一条语句的结果正确,而第二条就不行呢?有差别么?
作者: 天凌蓝    时间: 2014-3-11 19:39
神马情况?能贴一下结果出来吗?亲
作者: ok-Prince    时间: 2014-3-11 19:42
本帖最后由 ok-Prince 于 2014-3-11 19:44 编辑
天凌蓝 发表于 2014-3-11 19:39
神马情况?能贴一下结果出来吗?亲


file:///F:qq.jpg

QQ.jpg (7.84 KB, 下载次数: 53)

QQ.jpg

作者: 天凌蓝    时间: 2014-3-11 19:57
   该程序打印出来的小数,是足以将double 类型的值与最靠近它的临近值区分出来的最短的小数,它在小数点之前和之后都至少有一位。而1.1 这个数字不能被精确表示成为一个double,因此它被表示成为最接近它的double 值。该程序从2 中减去的就是这个值。这个计算的结果并不是最接近0.9 的double 值,所以并不是所有的小数都可以用二进制浮点数来精确表示的。你可以看看Java的API文档Java.lang.Double的toString()方法,里面有说




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2