System.out.println(1-0.1*9);
输出的结果按数学来算结果是:0.1 如果按从左到右来算也是8.1
但为什结果是0.09999999999999998 这是为什么了,这是什么运算????????????????
为什么 System.out.println(1-0.1*9);的答案
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
suziwen 2011-08-11 22:55关注首先
2进制无法精确显示0.10.1 你用ieee的浮点数标准怎么表示? 后52个字节是小数,第一个字节是符号,后面11个字节是阶码。2的负几次方的和加到一起是0.1? 答案是没有。楼主试一下 2.0-0.5这样的,算出来就是精确的了。因为0.5是2的-1次方。0.75这样的 2(-1)+2(-2)都是可以精确表示的。。。。如果你想让2.0-0.1准确的话,用bigdecimal来做即可。
编译器在处理一个数据时,当一种类型数据无法用二进制数精确表示时,只能按照一种规则去找一个数代替(比如取最接近这个数的二进制数代替
如果想让他精确可以这样
[code="java"]System.out.printf("%.1f",2.0-1.1); [/code]
或者
[code="java"]
BigDecimal a = new BigDecimal("2.0").subtract(new BigDecimal("1.1"));
System.out.println(a);
[/code]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报