DOUBLE类型转LONG型时遇到的奇怪问题
--------------------编程问答-------------------- --------------------编程问答-------------------- 试试用clng函数 --------------------编程问答-------------------- 其实并不奇怪,因为Int(7243.999)
的结果本来就是7243,而你给计算机二进制存储的变量赋724.4的值,肯定是取的近似值,于是……。
如果楼主是想取四舍五入的值就按1楼的代码那样用CInt函数吧。 --------------------编程问答-------------------- 的确是7243。这是由Double类型的数据误差所引用起。A*10是Double型数据:理论上是7244.0,而实际在计算机内是7243.99999999.....,而int是取不大于7243.99999999.....的最大整数。所以B=INT(A*10)的结果是7243,也就不足为奇了。
改成这样就可以保证结果:B=A*10 或者 B=Clng(A*10)。
--------------------编程问答-------------------- B=A*10 是VB内部隐式转换成Long型。 --------------------编程问答-------------------- 四舍六入,逢5看单双; cint 使用的是一种国际通用的财务数据转换法实现的 --------------------编程问答-------------------- DIM A AS DOUBLE ,B AS LONG
A=724.4
B=CLNG(A)
B=B*10 --------------------编程问答-------------------- 谢谢大家,但是 如果这样写 B= Int(A * 100) / 10 得到的结果就是正确的 7244
如果从 7243.99999999....., 这个角度来理解的话,那 这个 B= Int(A * 100) / 10 得到的结果也应该是 7243 呀 --------------------编程问答-------------------- Double型数据是有误差的。在计算机内存里面,并不是看我们的屏幕上显示的多少就是多少,屏幕上显示的数据跟内存数据是两回事:
Option Explicit--------------------编程问答-------------------- 一个非整数数在内存中表达是,一部分是整数,一部分是小数
Private Sub Command1_Click()
Dim A As Double, B As Long
A = 724.4
B = Int(A * 10)
Debug.Print 7244# - A * 10 '结果是2.27373675443232E-13
Debug.Print 7244# - ((A * 100) / 10) '结果是2.27373675443232E-13
End Sub
int 运算:无论小数多大,全部抛弃
cint运算:会四舍六入
补充:VB , 基础类