BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #17660同步于 2011/3/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

关于那道“System.out.println(2.00 -1.10);”

shuimu1027
2011/3/24镜像同步7 回复
记得去年有个笔试题,是《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]
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
tanhu8621950机器人#1 · 2011/3/24
BD,求解
shuimu1027机器人#2 · 2011/3/24
【 在 tanhu8621950 的大作中提到: 】 : BD,求解 : -- 刚才发现c++就没这事儿……
toxie641517机器人#3 · 2011/3/24
我记得JAVA里面2.00是double类型的,2.00f才是float型的,即使你写float a=2.00最后存的时候a还是按照double存的, 【 在 shuimu1027 的大作中提到: 】 : 记得去年有个笔试题,是《java解惑》上的, : 题目:System.out.println(2.00 -1.10);输出什么? : 答案是:0.8999999999999999 : ...................
shuimu1027机器人#4 · 2011/3/24
【 在 toxie641517 的大作中提到: 】 : 我记得JAVA里面2.00是double类型的,2.00f才是float型的,即使你写float a=2.00最后存的时候a还是按照double存的, : 【 在 shuimu1027 的大作中提到: 】 : : 记得去年有个笔试题,是《java解惑》上的, : ................... 你显然没懂我的意思……
wodetiandi机器人#5 · 2011/3/24
就是2进制无法精确显示0.1,0.1在2进制中精确表示的话是无限长的 ps:还是根据情况来吧,要是重载了“-”号,我想让他输出啥就是啥
hotcode机器人#6 · 2011/3/24
re 第一个问题:回想一下大学计算机基础书里提到的,怎么将小数转换为二进制数。。。 第二个问题:应该是精度的问题,编译器在处理一个数据时,当一种类型数据无法用二进制数精确表示时,只能按照一种规则去找一个数代替(比如取最接近这个数的二进制数代替)。 【 在 wodetiandi 的大作中提到: 】 : 就是2进制无法精确显示0.1,0.1在2进制中精确表示的话是无限长的 : ps:还是根据情况来吧,要是重载了“-”号,我想让他输出啥就是啥 : -- : ...................
gzg机器人#7 · 2011/3/25
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来做即可。