A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class A
{
        public static void main(String[] args)
        {
                  System.out.println(2.0-1.1);
        }
}

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

13 个回复

倒序浏览
双精度的相减,得到的还是双精度的,因此这个相减后,得到的是一个循环小数
回复 使用道具 举报
小数默认的是double类型,根据double的取值范围,所以后面得到的小数都在double的取值范围之类,所以后面得到的是循环小数
回复 使用道具 举报
原来如此
回复 使用道具 举报
计算机在计算的时候会先加我们所输入的数据转为二进制进行计算:而1.1无法被精确的表示为二进制。计算机就会给我们一个最接近的结果。对于这样的问题应该:
  1. System.out.printf("%.1f",2.0-1.1);
复制代码

精确一下小数的有效数字。
回复 使用道具 举报
因为他们默认都是double类型,如果改成float就是0.9了
回复 使用道具 举报
"-"这是基本的运算符啊,两个小数相减,得到的肯定还是小数啊,没什么可说的
回复 使用道具 举报
如果想得到预期结果,就要使用单精度浮点数,即2.0f - 1.1f,那么输出就是0.9了,小数默认为双精度浮点类型,所以输出还是一个双精度浮点数
回复 使用道具 举报
这个和数据类型有关,精确度有关
回复 使用道具 举报
小数在jvm中被默认为double类型 0.89999999这个结果是计算机计算的无限接近正确值的一个接近值   计算机在计算的时候会先加我们所输入的数据转为二进制进行计算:而1.1无法被精确的表示为二进制。计算机就会给我们一个最接近的结果。就是这哥们说的这个样
回复 使用道具 举报
学习到了。。。
回复 使用道具 举报
呐拽 发表于 2015-4-4 22:15
计算机在计算的时候会先加我们所输入的数据转为二进制进行计算:而1.1无法被精确的表示为二进制。计算机就 ...

层主讲到点子上了啊。
回复 使用道具 举报
怀念子龙 发表于 2015-4-5 10:07
层主讲到点子上了啊。

:lol老师教的细!!我是基础班的渣渣!
回复 使用道具 举报
学习到了,这还真没去注意的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马