Foxtable(狐表)用户栏目专家坐堂 → 关于单精度的疑问


  共有4967人关注过本帖树形打印复制链接

主题:关于单精度的疑问

帅哥哟,离线,有人找我吗?
gsnake
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5263 威望:0 精华:0 注册:2012/6/6 14:37:00
  发帖心情 Post By:2013/5/9 10:44:00 [显示全部帖子]

没错啊!
0.07999998


 回到顶部
帅哥哟,离线,有人找我吗?
gsnake
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5263 威望:0 精华:0 注册:2012/6/6 14:37:00
  发帖心情 Post By:2013/5/9 10:47:00 [显示全部帖子]

=0.07999998的原因
这里可能帮到你

1不等于1?

在命令窗口输入下面的代码:

Dim d As Double
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(d =
1
)

执行之后,你会惊讶地发现,d和1并不相等。
这是怎么回事,0.7 + 0.2 + 0.1明明就是1,而且第三条语句也证明了d的结果就是1啊。
这是因为d是Double类型,是浮点数,浮点数的1,可能并不会精确地等于1,而只是近似等于1。
毋需过分担心这种误差,这种误差只有10的负16次方左右,对日常计算的结果不会有任何影响,但是会影响数值比较的结果

如果需要精确比较两个数值,该如何处理呢,可以将上述代码改为:

Dim d As Double
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(Math.Round(d,
6) = 1
)

上面的代码,用Round函数将d的小数位数四舍五入到6位,然后再和1比较。

或者用Decimal类型代替Double类型:

Dim d As Decimal
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(d =
1
)

Decimal是高精度小数,不会有Double的那种误差。

 


 回到顶部