主题:关系表达式10*0.1=1的值为真为假?
marlene
[专家分:0] 发布于 2005-03-16 09:52:00
为什么0.1*10=1的值为假,而10*1=10的值为真呢?谢谢!
回复列表 (共21个回复)
沙发
codepk [专家分:2800] 发布于 2005-03-16 10:30:00
算术表达式0.1*10的值为双精度型
而1为整型
两个不同的类型怎么可能相等?
在1后面加#
0.1*10=1#
值为真
板凳
marlene [专家分:0] 发布于 2005-03-16 10:51:00
thank you!
为什么是双精度的而不是单精的
3 楼
faintzw [专家分:2660] 发布于 2005-03-16 12:32:00
一楼的不是正解……
10*0.1=1的值为真是肯定的。
但是,任何语言都会有精度误差
你可以运行一下:
cls
a#=10*0.1
print a#
看看结果,应该就会明白了吧。
4 楼
codepk [专家分:2800] 发布于 2005-03-16 14:29:00
就是因为类型不同,所以表示的精确度不一样
a!=5*0.3
a#=5*0.3
print a!,a#
明显不一样
系统默认是双精度的
如果是同一类型,就算有误差,也会一样相等
5 楼
wglnb [专家分:0] 发布于 2005-03-16 14:38:00
系统默认是单精度的.
6 楼
wglnb [专家分:0] 发布于 2005-03-16 14:45:00
print 0.1*10=1#
结果是0
7 楼
codepk [专家分:2800] 发布于 2005-03-16 15:12:00
原来试过可以的,现在不可以了
谁能反汇编就好了
8 楼
codepk [专家分:2800] 发布于 2005-03-16 15:33:00
谁来说下,到底变成啥类型了?
9 楼
faintzw [专家分:2660] 发布于 2005-03-16 22:06:00
5楼的对的。
反汇编随便找个w32dasm什么的就可以吧。
10 楼
staa [专家分:3690] 发布于 2005-03-17 22:01:00
我认为QB在进行算式运算时,遇到立即数,就将其作为双精度数对待,这本来没什么错,但QB在引用双精度数时“忘了”清除这个双精度数后面的无效值,就产生了不该出现的误差。
---------------- 一家之见
我来回复