黑马程序员技术交流社区

标题: 如何让0.01+0.09等于0.1??? [打印本页]

作者: jwx555    时间: 2014-7-25 13:22
标题: 如何让0.01+0.09等于0.1???
double a = 0.01 ;
double b = 0.09 ;

System.out.println(a+b) ;

输出结果:0.09999999999999999
作者: masai158    时间: 2014-7-25 13:33
小数是一个无穷大 接近  他的数,而不是一个准确的数
作者: 孤守星空    时间: 2014-7-25 13:37
(a*100+b*100)/100
作者: 刘斌2014    时间: 2014-7-25 13:40
这样写就可以   System.out.println(0.01f+0.09f);
作者: fantacyleo    时间: 2014-7-25 14:45
三楼的哥们儿说得挺好。实际中,如果你想精确到小数后某一位,比如计价精确到分,那么常用的方法就是乘以10的倍数化为整数后进行存储和运算,需要输出时再转为小数。
作者: sunny~    时间: 2014-7-25 14:58
我试过了     要想输出0.1

double a = 0.01 ;
double b = 0.09 ;

System.out.println((a*100+b*100)/100) ;这样写就对了
作者: 怀念黑海岸    时间: 2014-7-25 15:37
  个人认为是系统为了提高精度而产生这样子的结果,如果要获得想要的结果只需输出System.out.println(((float)(a+b)));降低对精度的需求即可。
作者: jwx555    时间: 2014-7-25 17:38
怀念黑海岸 发表于 2014-7-25 15:37
个人认为是系统为了提高精度而产生这样子的结果,如果要获得想要的结果只需输出System.out.println(((flo ...

float?

float 0.01+0.04 你再试试
作者: 思维    时间: 2014-7-25 21:00
http://bbs.itheima.com/thread-131976-1-1.html我的帖子里面有这个解答!
作者: ws484664    时间: 2014-7-25 23:33
看看         
作者: 新语新空    时间: 2014-7-25 23:48
double类型不是精确存储,而是科学计数法的方式存储。
double大小为8字节,内存中的存储方式如下:
符号位(1bit)指数(11bit)尾数(52bit)。
你想做小数的加法,并且保留确定位数的小数,三楼提供的方法最常用。

作者: adent    时间: 2014-7-26 00:39
fantacyleo 发表于 2014-7-25 14:45
三楼的哥们儿说得挺好。实际中,如果你想精确到小数后某一位,比如计价精确到分,那么常用的方法就是乘以10 ...

原来这样。
作者: 357016138    时间: 2014-7-26 00:50
double a = 0.01 ;
double b = 0.09 ;

System.out.println("0.1") ;
作者: 阿磊    时间: 2014-7-26 00:55
357016138 发表于 2014-7-26 00:50
double a = 0.01 ;
double b = 0.09 ;

很犀利的点评
作者: 怀念黑海岸    时间: 2014-7-26 18:03
jwx555 发表于 2014-7-25 17:38
float?

float 0.01+0.04 你再试试

我到网上查了下,这个问题跟计算机的二进制编码有关系,当用二进制表示小数时,他会存在误差,而不是像整数时的那么精确。具体的一些我也说不清楚了。很抱歉哈。
作者: cat73    时间: 2014-7-26 18:34
如果要绝对精准 就不要用浮点型 浮点型总会有精度损失的




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