当前位置:编程学习 > VB >>

Int(double) 为什么取整值不对

Dim ldValue as Double 
Dim sRet As Double
Dim stemp As double
Dim lIntNum As Long


ldValue = 256.275
    stemp = ldValue * (10 ^ 2) + 0.5
    lIntNum = Int(stemp)
    sRet = lIntNum / (10 ^ 2)

为什么 lIntNum =25627,这是什么问题? 如果把stemp 定义成single就对了 --------------------编程问答-------------------- 这是浮点小数精度所致.
Private Sub Command1_Click()
    Dim ldValue As Double
    Dim sRet As Double
    Dim stemp As Double
    Dim lIntNum As Long
    ldValue = 256.275
    stemp = ldValue * (10 ^ 2) + 0.5000001
    Print stemp
    lIntNum = Int(stemp)
    Print lIntNum
    sRet = lIntNum / (10 ^ 2)
End Sub
--------------------编程问答-------------------- 改成这样

lIntNum = CLng(stemp)
--------------------编程问答-------------------- lIntNum = Int(stemp + 0.5) --------------------编程问答-------------------- 我觉得这样解释好一些,Int是不考虑四舍五入的,就算Int(2.6)也是2,你可看MSDN中的说明:

Int 和 Fix 都会删除 number 的小数部份而返回剩下的整数。

Int 和 Fix 的不同之处在于,如果 number 为负数,则 Int 返回小于或等于 number 的第一个负整数,而 Fix 则会返回大于或等于 number 的第一个负整数。例如,Int 将 -8.4 转换成 -9,而 Fix 将 -8.4 转换成 -8。


Round则不同:
返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。 --------------------编程问答--------------------
引用 2 楼 nlogntime 的回复:
改成这样

lIntNum = CLng(stemp)

这样最好,int函数应用时是有一些要注意的,如Int(9.999999999)=9,Int(-1.1)=-2等。当你双精度浮点数时,计算机进行是二进制浮点运算,lIntNum =25627.99999999……,结果就弄出一个Int(IntNum)=25627来。 --------------------编程问答-------------------- 这个还真不知道,学习了。。。 --------------------编程问答-------------------- 支持网狐 --------------------编程问答--------------------
引用 4 楼 bcrun 的回复:
………………
Round则不同:
返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。


'Round() 不是‘四舍五入运算’:
Print Round(8.55, 1)    '输出8.6
Print Round(8.65, 1)    '也是输出8.6



要进行 ‘四舍五入’,用 CInt() 或 CLng() 。
楼主,你的 lIntNum 已经声明为 Long类型变量了,干吗要“lIntNum = Int(stemp)”?
你直接:lIntNum = stemp
不就行了吗!何必多此一举要 Clng() 或 CInt() ?
它自动就给你 CLng() 了!
更何况 Int() 根本就不是你的意图。
--------------------编程问答-------------------- 取整不会四舍五入。 --------------------编程问答--------------------

Private Sub Command1_Click()
Dim a As Double
a = 1.511
Dim b As Integer
b = a
Print b
End Sub

b=2
我笑了 --------------------编程问答-------------------- 8楼说的对,关于Round,MSDN上简单的“四舍五入运算”的说明是不可靠的,具体可看
具体参考:
http://topic.csdn.net/u/20091112/16/0A243C84-BF8C-4B0A-968D-611E458A6BF6.html
Round(9 _ 2)不是四舍五入吗?
补充:VB ,  VBA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,