返回信息流记得去年有个笔试题,是《java解惑》上的,
题目:System.out.println(2.00 -1.10);输出什么?
答案是:0.8999999999999999
原因是1.1不能被浮点型精确表示。
其实不是很理解这句话
1.什么小数可以被浮点型精确表示?
2.我觉得显然默认“2.00”和“1.10”为double,那么当指定为“2.00f”“1.10f”时,输出为“0.9”,这个为什么?怎么就因为float有效位7位,double有效位15位就能算出来了?
求真相啊……[ema1]
这是一条镜像帖。来源:北邮人论坛 / java / #17660同步于 2011/3/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于那道“System.out.println(2.00 -1.10);”
shuimu1027
2011/3/24镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
我记得JAVA里面2.00是double类型的,2.00f才是float型的,即使你写float a=2.00最后存的时候a还是按照double存的,
【 在 shuimu1027 的大作中提到: 】
: 记得去年有个笔试题,是《java解惑》上的,
: 题目:System.out.println(2.00 -1.10);输出什么?
: 答案是:0.8999999999999999
: ...................
【 在 toxie641517 的大作中提到: 】
: 我记得JAVA里面2.00是double类型的,2.00f才是float型的,即使你写float a=2.00最后存的时候a还是按照double存的,
: 【 在 shuimu1027 的大作中提到: 】
: : 记得去年有个笔试题,是《java解惑》上的,
: ...................
你显然没懂我的意思……
re
第一个问题:回想一下大学计算机基础书里提到的,怎么将小数转换为二进制数。。。
第二个问题:应该是精度的问题,编译器在处理一个数据时,当一种类型数据无法用二进制数精确表示时,只能按照一种规则去找一个数代替(比如取最接近这个数的二进制数代替)。
【 在 wodetiandi 的大作中提到: 】
: 就是2进制无法精确显示0.1,0.1在2进制中精确表示的话是无限长的
: ps:还是根据情况来吧,要是重载了“-”号,我想让他输出啥就是啥
: --
: ...................
0.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来做即可。