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

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 ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,