原创 VB中取整问题

2007-9-13 13:02 10145 9 9 分类: 工程师职场

1、VB中取整问题?怎么取整?
   查看MSDN帮助
********************************************
下面的示例利用 CLng 函数把值转换为 Long:


Dim MyVal1, MyVal2, MyLong1, MyLong2
MyVal1 = 25427.45: MyVal2 = 25427.55    ' MyVal1, MyVal2 是双精度值。
MyLong1 = CLng(MyVal1)    ' MyLong1 包含 25427。
MyLong2 = CLng(MyVal2)    ' MyLong2 包含 25428。



--------------------------------------------------------------------------------
 
注意 CLng 函数与 Fix 和 Int 函数功能不同,后两者函数对数值的小数部分进行截尾取整而不是四舍五入。当小数部分恰好等于 0.5 时, CLng 函数通常向与此数最接近的偶数取整。例如,0.5 取整为 0、1.5 取整为 2。

***********************************************
但实践证明,好象是"错误"的。
“后两者函数对数值的小数部分进行截尾取整”但实践证明依然是进行“四舍五入”的,实验程序代码如下:


Private Sub Command6_Click()
Dim test As Long  '(关键错误)
test = Text7.Text
Text8.Text = CLng(test)
End Sub


  再查看MSDN帮助


************************************************
注意 CInt 与 Fix 和 Int 函数不同,后两者将数字的分数部分截尾取整,而不是四舍五入。当分数部分恰好为 0.5 时,CInt 函数通常将其四舍五入为最接近的偶数。例如,0.5 被四舍五入为 0,而 1.5 被四舍五入为 2。
************************************************


原来问题出现在Dim test As Long已经强制转化为长整形了,而这种长整形当然就是四舍五入的了。后面不管你怎么转换都是四舍五入后的整形了。


正确的测试程序:
Private Sub Command6_Click()
Dim test As Double
test = Text7.Text
Text8.Text = Int(test)
End Sub


不过还有还几段也是值得看的。
*************************************************
Int 和 Fix 函数都删除 number 参数的小数部分并返回以整数表示的结果。
Int 和 Fix 函数的区别在于如果 number 参数为负数时,Int 函数返回小于或等于 number 的第一个负整数,而 Fix 函数返回大于或等于 number 参数的第一个负整数。例如,Int 将 -8.4 转换为 -9,而 Fix 函数将 -8.4 转换为 -8。


Fix(number) 等同于:


Sgn(number) * Int(Abs(number))


下面的示例说明 Int and Fix 函数如何返回一整数 小数位数:
MyNumber = Int(99.8)    ' 返回 99。
MyNumber = Fix(99.2)    ' 返回 99。
MyNumber = Int(-99.8)   ' 返回 -100。
MyNumber = Fix(-99.8)   '返回-99。
MyNumber = Int(-99.2)   '返回 -100。
MyNumber = Fix(-99.2)   '返回 -99。


*****************************************************

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条