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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Joemi 中级黑马   /  2014-8-2 08:25  /  2173 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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

20 个回复

倒序浏览
?是【0.09999999999999999】,二进制无法精确表示小数的问题
回复 使用道具 举报
浮点数的悲剧
回复 使用道具 举报
因为十进制数0.1无法用二进制小数有限表示,就像10/3=3.333333...
回复 使用道具 举报
哦,看楼上的懂了,谢谢你们~
回复 使用道具 举报
不用谢哈
回复 使用道具 举报
学习了
二进制无法精确表示小数的问题
回复 使用道具 举报
可是这样的时候,怎么进行数学运算???不会出问题》
回复 使用道具 举报
是啊,该怎么改这个,求大神们指导
回复 使用道具 举报
应该怎么办呢
回复 使用道具 举报
烟海 发表于 2014-8-2 16:11
可是这样的时候,怎么进行数学运算???不会出问题》

实际计算都会指定精度的,比如保留几位小数,满足精度要求就可以了
回复 使用道具 举报
同求怎么办?
回复 使用道具 举报
fantacyleo 发表于 2014-8-2 23:04
实际计算都会指定精度的,比如保留几位小数,满足精度要求就可以了

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

有没有什么好办法能运算出来??、
回复 使用道具 举报
烟海 发表于 2014-8-3 00:27
但是现在。0.09+0.01都运算不出来??

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

Math.round,四舍五入一下就ok了
回复 使用道具 举报 1 0
fantacyleo 发表于 2014-8-3 00:31
Math.round,四舍五入一下就ok了

呃。。好吧。。。神奇的算法。。。不过结果达到了。。。。
回复 使用道具 举报
算法比较好!

评分

参与人数 2黑马币 +10 收起 理由
孤独的天奇 + 5 很给力!
锦宁 + 5 赞一个!

查看全部评分

回复 使用道具 举报
(a*100+b*100)/100
回复 使用道具 举报
因为这是浮点数,浮点数是以可科学计数法存储的,并且由于二进制的缺陷造成了浮点数的精度下降了。如二进制的0.11表示的十进制是0.75但你要定义一个浮点数为0.9那么你需要想0.11的后面加加数使它转换成使劲之后能凑到0.9,带这样就会有误差。
回复 使用道具 举报
小数部分在转换成2进制会有精度损失的
回复 使用道具 举报
精确计算用 BigDecimal

java.math.BigDecimal
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马