黑马程序员技术交流社区

标题: 0.01+0.09 [打印本页]

作者: Joemi    时间: 2014-8-2 08:25
标题: 0.01+0.09
本帖最后由 Joemi 于 2014-8-4 19:05 编辑

public class Mathtest{
    public static void main(String []args){
        double a=0.09,b=0.01;
         System.out.println(a+b)
    }
}
//打印结果为什么是0.999999999999,而不是0.1
作者: supertoy    时间: 2014-8-2 09:40
?是【0.09999999999999999】,二进制无法精确表示小数的问题
作者: 江苏孙浩    时间: 2014-8-2 10:06
浮点数的悲剧
作者: fantacyleo    时间: 2014-8-2 12:40
因为十进制数0.1无法用二进制小数有限表示,就像10/3=3.333333...
作者: Joemi    时间: 2014-8-2 14:43
哦,看楼上的懂了,谢谢你们~
作者: Ezreal    时间: 2014-8-2 14:57
不用谢哈
作者: 200米王朝    时间: 2014-8-2 16:07
学习了
二进制无法精确表示小数的问题
作者: 烟海    时间: 2014-8-2 16:11
可是这样的时候,怎么进行数学运算???不会出问题》
作者: Joemi    时间: 2014-8-2 16:48
是啊,该怎么改这个,求大神们指导
作者: 汤姆纳斯    时间: 2014-8-2 22:54
应该怎么办呢
作者: fantacyleo    时间: 2014-8-2 23:04
烟海 发表于 2014-8-2 16:11
可是这样的时候,怎么进行数学运算???不会出问题》

实际计算都会指定精度的,比如保留几位小数,满足精度要求就可以了
作者: 刘一阳    时间: 2014-8-2 23:22
同求怎么办?
作者: 烟海    时间: 2014-8-3 00:27
fantacyleo 发表于 2014-8-2 23:04
实际计算都会指定精度的,比如保留几位小数,满足精度要求就可以了

但是现在。0.09+0.01都运算不出来??

有没有什么好办法能运算出来??、
作者: fantacyleo    时间: 2014-8-3 00:31
烟海 发表于 2014-8-3 00:27
但是现在。0.09+0.01都运算不出来??

有没有什么好办法能运算出来??、 ...

Math.round,四舍五入一下就ok了
作者: 烟海    时间: 2014-8-3 01:13
fantacyleo 发表于 2014-8-3 00:31
Math.round,四舍五入一下就ok了

呃。。好吧。。。神奇的算法。。。不过结果达到了。。。。
作者: niushicha    时间: 2014-8-3 01:21
算法比较好!
作者: 357016138    时间: 2014-8-3 01:43
(a*100+b*100)/100
作者: Moriarty    时间: 2014-8-3 07:23
因为这是浮点数,浮点数是以可科学计数法存储的,并且由于二进制的缺陷造成了浮点数的精度下降了。如二进制的0.11表示的十进制是0.75但你要定义一个浮点数为0.9那么你需要想0.11的后面加加数使它转换成使劲之后能凑到0.9,带这样就会有误差。
作者: 胥亮    时间: 2014-8-3 08:42
小数部分在转换成2进制会有精度损失的
作者: 200米王朝    时间: 2014-8-3 09:48
精确计算用 BigDecimal

java.math.BigDecimal
作者: 水星不不    时间: 2014-8-3 10:06
看回复看懂的。。。。




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