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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 波涛   /  2014-5-17 13:29  /  8361 人查看  /  48 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

zy524488 发表于 2014-5-17 16:43
其实无论是double还是float都会遇到这个问题,就拿float说话,float的0.1二进制形式是001111011 1001100110 ...

那该实际中如何避免
回复 使用道具 举报
受教了、、、可是真正的解决方法是什么呢?
回复 使用道具 举报
System.out.printf("%.2f%n",(double)0.01+ (double)0.09); 转换成2进制相加
回复 使用道具 举报
luheqi 来自手机 中级黑马 2014-6-26 13:55:28
24#
不变就对了,0.1无法精确的用二进制表示,所以for循环很忌讳用浮点数来确定两边是否相等的。你试试BigInteger 或者BigDecimal 类,BigDecimal 实现了任意精度的浮点数运算。
回复 使用道具 举报
因为浮点数运算会损失精度
回复 使用道具 举报
学习了。。。。。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
同样第一次看到这样的错误 , 学习了!
回复 使用道具 举报
同意8楼的说法
回复 使用道具 举报
﹑淼 来自手机 中级黑马 2014-8-8 23:52:43
29#
double在计算机中是不精确的数。所以运算的结果是一个近似数
回复 使用道具 举报
float a = (float)0.01, b = (float)0.09;这样就可以了。
回复 使用道具 举报
学习学习!
回复 使用道具 举报
GYSWL 中级黑马 2014-8-25 17:38:16
32#
居然的这样的,得好好学习学习了
回复 使用道具 举报
细节问题,受教了
回复 使用道具 举报
这是个经典的问题。。。。
回复 使用道具 举报
Hosing 中级黑马 2014-11-20 19:25:35
35#
杜工 发表于 2014-9-19 12:03
这是个经典的问题。。。。

能解释一下吗?
回复 使用道具 举报
还有这种情况啊?
回复 使用道具 举报
dimost 来自手机 中级黑马 2014-12-22 00:03:46
37#
学习中!下来试试
回复 使用道具 举报
lby369 中级黑马 2014-12-23 21:27:39
38#
这个问题我也见过。。
回复 使用道具 举报
dimost 来自手机 中级黑马 2014-12-25 23:01:12
39#
来看看  一楼讲的很精辟
回复 使用道具 举报
还没遇到过这个问题,,提前看看了,嘿嘿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马