黑马程序员技术交流社区

标题: 基本数据类型的,有大神可以解析下么 [打印本页]

作者: 叶追秋    时间: 2015-4-3 23:55
标题: 基本数据类型的,有大神可以解析下么
class A
{
        public static void main(String[] args)
        {
                  System.out.println(2.0-1.1);
        }
}

这个程序语句输出结果为什么是0.8999999999?


作者: 殷俊    时间: 2015-4-4 00:01
双精度的相减,得到的还是双精度的,因此这个相减后,得到的是一个循环小数
作者: 飞翔的侠客604    时间: 2015-4-4 00:13
小数默认的是double类型,根据double的取值范围,所以后面得到的小数都在double的取值范围之类,所以后面得到的是循环小数
作者: 刚起步的小马驹    时间: 2015-4-4 21:47
原来如此

作者: 呐拽    时间: 2015-4-4 22:15
计算机在计算的时候会先加我们所输入的数据转为二进制进行计算:而1.1无法被精确的表示为二进制。计算机就会给我们一个最接近的结果。对于这样的问题应该:
  1. System.out.printf("%.1f",2.0-1.1);
复制代码

精确一下小数的有效数字。
作者: wenhb    时间: 2015-4-4 23:08
因为他们默认都是double类型,如果改成float就是0.9了
作者: 孙振祥    时间: 2015-4-4 23:09
"-"这是基本的运算符啊,两个小数相减,得到的肯定还是小数啊,没什么可说的
作者: 陈佳    时间: 2015-4-4 23:32
如果想得到预期结果,就要使用单精度浮点数,即2.0f - 1.1f,那么输出就是0.9了,小数默认为双精度浮点类型,所以输出还是一个双精度浮点数
作者: 朱闹闹    时间: 2015-4-4 23:48
这个和数据类型有关,精确度有关
作者: 屠赞华    时间: 2015-4-5 00:22
小数在jvm中被默认为double类型 0.89999999这个结果是计算机计算的无限接近正确值的一个接近值   计算机在计算的时候会先加我们所输入的数据转为二进制进行计算:而1.1无法被精确的表示为二进制。计算机就会给我们一个最接近的结果。就是这哥们说的这个样
作者: 丿天邪    时间: 2015-4-5 01:51
学习到了。。。
作者: 怀念子龙    时间: 2015-4-5 10:07
呐拽 发表于 2015-4-4 22:15
计算机在计算的时候会先加我们所输入的数据转为二进制进行计算:而1.1无法被精确的表示为二进制。计算机就 ...

层主讲到点子上了啊。
作者: 呐拽    时间: 2015-4-6 23:03
怀念子龙 发表于 2015-4-5 10:07
层主讲到点子上了啊。

:lol老师教的细!!我是基础班的渣渣!
作者: Sylvanas    时间: 2015-4-6 23:16
学习到了,这还真没去注意的




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