窗体上放一个command和两个label,点击按钮就可以看到鼠标按下和释放的时间:
成都创新互联公司网站建设服务商,为中小企业提供成都做网站、网站设计服务,网站设计,网站托管运营等一站式综合服务型公司,专业打造企业形象网站,让您在众多竞争对手中脱颖而出成都创新互联公司。
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim a As SYSTEMTIME
GetSystemTime a
With a
' Label1 = .wHour ":" .wMinute ":" .wSecond ":" Format(.wMilliseconds / 1000, "0.0")
Label1 = .wHour ":" .wMinute ":" .wSecond ":" .wMilliseconds
End With
End Sub
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim a As SYSTEMTIME
GetSystemTime a
With a
Label2 = .wHour ":" .wMinute ":" .wSecond ":" .wMilliseconds
End With
End Sub
double类型的精度确实是可定义类型中最高的,但有效数字为15或16位
另一种Decimal 数据类型有效位可达到28或29位,但不含指数位
应该可以这样理解:
Decimal精度更高但示数范围小;double反之
而且Decimal 数据类型只能在 Variant中使用,也就是说,不能声明一变量为 Decimal 的类型
上面有高手给了你利用Decimal 数据类型解决例题的办法。
另外如果需要,还可以自己定义变量或数组来记录超大数,有效位和示数范围上不封顶,不过进位借位等等操作只有自己解决了
有的,首先Currency(货币型)是定点数(又叫变比整型数),占用8个字节(与Double一样),数值范围从-922,337,203,685,477.5808 到 922,337,203,685,477.5807,比Double的15位有效数字的精度要高。请注意,它的小数位是固定4位的哦,这就是它叫定点数的原因(而Double是浮点数,即小数点的位置是浮动的、变化的)。
此外,VB还有一种隐藏的数据类型Decimal,占用14个字节,这是个特殊的变比数,数值范围是 +/-79,228,162,514,264,337,593,543,950,335,如果含有小数,则小数点右边最多可以有28位数:+/-7.9228162514264337593543950335,最小的非零值为+/-0.0000000000000000000000000001
之所以Decimal是隐藏的,是因为它的运行效率很低,在执行大量运算时会严重影响程序速度,所以VB不推荐使用它。因此,要想在自己的程序中使用Decimal,必须经过特殊的处理:首先要把变量声明为Variant型,然后用CDec函数把数值进行转换后赋值给变量,这个变量就会自动变为Decimal型了。要注意的是,如果原数值的有效位数超过15位(也就是Duble型的最高精度),要先把这个数值存放到一个字符串变量中,然后再用CDec函数转换后赋值给Variant型变量,听起来够复杂吧?下面是个例子:
Private Sub Form_Click() '点击窗体运行
Dim d As Variant, s As String
s = "12345678901234567890"'这个数如果用Duble显示会变成1.23456789012346E+19
d = CDec(s)
Print d '现在显示的则是12345678901234567890
Print d + 10000 '可以直接参与运算的,运算结果的精度也是超过Duble的
End Sub
仅仅是普通表达式的话,定义数据类型,比如从单精度改为双精度,如果想保留小数点位数,用formatnumber来处理。如果是某个算法的精度,就要复杂一些,要定义一个误差,在算法迭代过程中,用while语句判断计算结果的残差是否小于定义的误差值,至于残差如何计算,与你的算法有关