关于Int()函数的问题

Greaitm 2003-12-19 05:02:23
有一个奇怪的问题:
请高手指教:
在vb里
#16:20:00#/#00:01:00# 等于 980
Clng(#16:20:00#/#00:01:00#)也等于980
int(#16:20:00#/#00:01:00#) 却等于979

为什么???
...全文
70 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Greaitm 2003-12-22
可能是intel跟amd的CPU不同吧,不知道有没有人正是这点?
回复
rainstormmaster 2003-12-21
我的计算机测试都是980
win98 se
vb6
回复
Hope_sys 2003-12-21
我测试的结果是980
测试系统 WinXP 赛扬800 VB6
不存在所说的问题
而且(#16:20:00#/#00:01:00#)的结果是980.000000000001
回复
jhzhou882 2003-12-20
怀疑(#16:20:00#/#00:01:00#)的结果是
979.99999999999999999999999999999999999999999999999999999循环

如果转化成DOUBLE因为超过精度.
最终还是被转化为 980
回复
landongfang 2003-12-19
Dim MyNumber
MyNumber = Int(99.8) ' Returns 99.

回复
jhzhou882 2003-12-19
怀疑(#16:20:00#/#00:01:00#)的结果是
979.99999999999999999999999999999999999999999999999999999循环
回复
jhzhou882 2003-12-19
Int(#16:20:00#/#00:01:00#) 却等于979
一个是舍掉小数 一个是四舍五入

回复
SoHo_Andy 2003-12-19
呵呵,知道问题在哪里就好,以后不随便使用int就好了
回复
jhzhou882 2003-12-19
CInt(#16:20:00#/#00:01:00#) 却等于980
回复
Greaitm 2003-12-19
而且我用int(cdbl(#16:20:00#/#00:01:00#))得出的是980
我是要算出分钟数,所以用Clng或者Cint都不符和我的要求,但用int出现这个情况
害我调试了半天。
回复
online 2003-12-19
我的计算机测试都是980
win2000 pro
vb6
回复
SoHo_Andy 2003-12-19
cbl() 为 CDbl()
回复
SoHo_Andy 2003-12-19
可能这个int函数有问题,也可能是数据类型运算时我们看到的数值和
实际内存中的数值不同造成的

比如我用cbl() 或者 和你一样直接计算 #16:20:00#/#00:01:00# 也都是980

只要加了int 值就是979,

Int 函数返回小于或等于该参数之最大整数,如果这句描述没错的话,
#16:20:00#/#00:01:00# 这个结果本身一定不是整数的
回复
liyan010 2003-12-19
学习 & 记录
回复
Greaitm 2003-12-19
那就奇怪了 我用的是vb+sp5 win2k+sp4 amd1700+ nForce芯片的主板
我算#16:20:00#/#00:01:00# 就等于 980,后面没有小数了
回复
SoHo_Andy 2003-12-19
测试
Private Sub Command1_Click()
MsgBox (#4:20:00 PM# / #12:01:00 AM#)
MsgBox CLng(#4:20:00 PM# / #12:01:00 AM#)
MsgBox Int(#4:20:00 PM# / #12:01:00 AM#)

MsgBox CInt(#4:20:00 PM# / #12:01:00 AM#)
End Sub

你使有CInt就不会有问题,区别在于

CInt 函数 Integer -32,768 至 32,767,小数部分四舍五入
Int 函数 返回参数的整数部分
回复
TimLee✿ 2003-12-19


学习
回复
Hope_sys 2003-12-19
没有啊!我讲你所写的在VB中调试结果都是980
#16:20:00#/#00:01:00# 的结果是980.000000000001
所以不存在你说的问题
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7453

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告