注册 登录
编程论坛 VB6论坛

int(11/10-0.1)和fix(11/10-0.1)为什么都是等于0?

dsq_0 发布于 2013-03-15 19:24, 809 次点击
我有int(11/10-0.1)和fix(11/10-0.1)为什么都是等于0????????
而  dim i as integer
    i=11/10-0.1
    msgbox int(i)
    msgbox fix(i)
它们都是1
以上是在VB6.0中实验????
不明白为什么,请高手来解决一下。。。
11 回复
#2
Susake2013-03-15 19:26
不懂VB...
#3
yz10252013-03-15 22:59
不懂VB...
只有本站会员才能查看附件,请 登录
#4
风吹过b2013-03-16 09:32
int  取一个浮点数的整数部分。
int 正数,负数,都是得到小数点前面的部分。

fix 取一个不大小这个浮点数的整数。
fix 正数时,与 int 结果相同。
fix 负数时,与 int 相差1 。

例:
   int(3.14) = 3
   fix(3.14) = 4

   int(-3.14) = -3
   fix(-3.14) = -4
#5
dsq_02013-03-16 21:45
难道没有人解答吗?
#6
dsq_02013-03-17 21:15
ding
#7
zhengang10262013-03-18 08:53
是有点奇怪,
a=Int(11 / 10 - 0.1)
Debug.Prin a
得到1
Debug.Prin Int(11 / 10 - 0.1)
得到0
啥原因?不清楚,请高手讲课。
#8
风吹过b2013-03-18 10:21
我二个结果都得到的是 0
==============
这个计算结果,与 二进制转十进制 舍入误差有关,与数据类型有关。
(11 / 10 - 0.1)
因为 0.1 是浮点数,所以整个表达式按浮点进行运算。然后运算结果再进行后面的操作。
结果是 1,但有可能这个 1 在内存里是 0.9999999999999
这个就是二进制转十进制存在的舍入误差,在 excel 里也有时能看到这种的情况。

不光VB6会出现这种情况,在其它语言里,只有不是使用 十进制计算并且使用十进制修正指令进行操作的汇编,并且是整数数据的情况外,均有可能出现。
汇编里,数据的 十进制计算,有几个专门的指令,那个是 定点数计算用的,不一定是整数。如金融数据类型,就是一个定点数,永远只有小数点后4位。
#9
dsq_02013-03-18 18:47
?11 / 10 - 0.1
 1
? Int(11 / 10 - 0.1)
 0
#10
yz10252013-03-18 20:20
要有Int()和Fix()的源码才知道吧~不然只能用猜的~

不知道当初学校教的~关于C代码在编译器里处理成组合语言~
(以前叫这当下的部分档案为中间档~考试的时候算的要死要活的~人工算~)
再Link外部函式成执行档的过程~能否解释~毕竟传说VB是C写的~
#11
yz10252013-03-18 20:24
补充英文为 Intermediate File

程式Compile流程
http://www.prudentman.idv.tw/2008/05/compile.html

当初算的要死要活~记忆深刻~要人命的学分~
#12
十兄2013-09-26 21:31
回复 4楼 风吹过b
好像,刚好整反了
int  取不大于浮点数的整数
fix  取浮点数的整数部分
1