我正在尝试在 Excel 中的 VBA 中获取数字的小数部分。是否有一种特定的方法最适合获取数字的小数部分?
我尝试了两种不同的方法。其中一种方法给出的预期结果为 0.1。另一种方法给出了意想不到的结果 9.99999999999996E-02。请帮助我理解为什么我会收到这个意外的结果。请参考以下代码:
Dim DecNumber As Double
Dim TempSplit() As String
Dim DecFract As Double
DecNumber = 15.1
'METHOD 1
'Gives unexpected result of 9.99999999999996E-02
DecFract = DecNumber - Int(DecNumber)
'METHOD 2
'Gives expected result of 0.1
TempSplit() = Split(DecNumber, ".")
DecFract = TempSplit(1) / (10 ^ Len(CStr(TempSplit(1))))
结果会受到浮点舍入误差的影响,因为 VBA 不是为高精度科学计算而设计的。
请尝试一下。
Sub demo()
Dim DecNumber As Double
Dim TempSplit() As String
Dim DecFract As Currency
DecNumber = 15.1
'METHOD 1
DecFract = DecNumber - Int(DecNumber)
Debug.Print DecFract
'METHOD 2
'Gives expected result of 0.1
TempSplit() = Split(DecNumber, ".")
DecFract = TempSplit(1) / (10 ^ Len(CStr(TempSplit(1))))
End Sub