黑马程序员技术交流社区

标题: 浮点数问题 [打印本页]

作者: 136616244    时间: 2014-5-2 10:08
标题: 浮点数问题
double d=3-2.6;
  System.out.println(d==0.4);的值为什么为false?


Double d=3-0.5;
  System.out.println(d==2.5);的值为什么为True?




还有一个就是浮点数的存储,float  类型值为8.1f的符号位,指数域,有效位数分别是多少?怎么算来的?详细点,先谢谢了:lol





作者: 136616244    时间: 2014-5-2 10:35
本帖最后由 136616244 于 2014-5-2 10:37 编辑

都说浮点数是近似存储但是我不是太懂,于是就在百度了一下,还是不懂,于是乎今天在图书馆找到一本书介绍浮点数,从22页介绍到44页,还是一头雾水,坐等大神来
作者: 想飞的鱼    时间: 2014-5-2 10:46
因为==是比较运算符,它的最后结果只能是true or false,上面代码中d不等于0.4所以输出false,下面两行代码同理,另外我不明白的是为什么定义double d=3-2.6;编译运行通过了,3-2.6是什么数?
作者: eternallove    时间: 2014-5-2 10:59
是由于小数的小数部分的二进制计算不精确。

作者: skill20    时间: 2014-5-2 11:13
在java中具体类型的浮点数运算是不精确的,如果在java程序中输
出3-2.6的值,可以看到输出的结果为0.3999999999999999,这个值
是不精确的,所以表达式3-2.6==0.4的值是假,即:false;
1、使用基本数据类型进行浮点数计算,并输出差值和比较结果
  1. public class Compare{
  2.          public static void main(String[] args){
  3.               System.out.println(3-2.6);
  4.               System.out.println(3-2.26==0.4);
  5. }
  6. }
复制代码
           
2、使用BigDecimal进行浮点数计算,并输出差值和比较结果
  1. import java.math.BigDecimal;
  2. public class Compare {
  3.        public static void main(String[] args){
  4.           BigDecimal x=new BigDecimal("3");        
  5.           BigDecimal y=new BigDecimal("2.6");      
  6.           BigDecimal z=x.subtract(y);              
  7.           double value=z.doubleValue();            //将计算结果转换为基本数据类型double型
  8.           System.out.println(value);               //输出计算结果
  9.           System.out.println(value==0.4);
  10. }
  11. }
复制代码

作者: 想飞的鱼    时间: 2014-5-2 11:18
想飞的鱼 发表于 2014-5-2 10:46
因为==是比较运算符,它的最后结果只能是true or false,上面代码中d不等于0.4所以输出false,下面两行代码 ...

哦 ,原来是减号,恍然大悟~:L这两天学白痴了.......我会错了意,我的回答你可以直接忽略了!汗、、、
作者: 136616244    时间: 2014-5-2 12:05
skill20 发表于 2014-5-2 11:13
在java中具体类型的浮点数运算是不精确的,如果在java程序中输
出3-2.6的值,可以看到输出的结果为0.399999 ...

你在哪copy的吧
作者: 郭帅帅    时间: 2014-5-2 13:14
好像是由于双精度储存的问题,它保留15个有效小数位
作者: 136616244    时间: 2014-5-2 15:00
郭帅帅 发表于 2014-5-2 13:14
好像是由于双精度储存的问题,它保留15个有效小数位

float 有8个有效位,称为单精度,Double有16个有效位,称为双精度




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