如何在Visual Basic中阻止小数被截断,并将其保留为完整的小数而不是科学记数法中的截断数?
我从Excel宏中获得了一些代码,我正在为某人修改(只有Debug.Print语句是我的):
rttime = asht.Cells(i, timecol).Value
Debug.Print "rttime=" & rttime
Debug.Print "To string: " & CStr(CDec(rttime))
rtdelta = rttime - wavonset_value 'searchcol="AOISlide2"
Debug.Print "rtdelta=" & rtdelta
Debug.Print语句给了我:
rttime=1.343301E+12
To string: 1343301000000
rtdelta=0
所以基本上这里发生的是以科学计数法从Excel工作表中提取的值,并且该表示法中未显示的所有内容都会被截断。
实际数字应该是 1343300687515.39 ,但是它被强制降低到 1.343301E + 12 ,即使我强制它超出科学记数法,它仍然给予我 1343301000000 。
如何将其作为带小数点的实际数字?这方面实际上是必需的,因为在某些情况下,可能只有20左右的差异,但由于它截断到数百万的位置,它完全没用。
编辑:这是参考的整个功能
Function GetAOIRowStart(asht As Worksheet, startrow&, endrow&, searchstr$, searchcol&,
AOItime_start As Single) As Long
Dim i&
Dim rtdelta As Single
Dim rttime As Single
Dim wavonset_value As Single
Dim timecol&
timecol = 4
wavonset_value = asht.Cells(startrow, timecol).Value 'tettime
Debug.Print "wavonset_value=" & wavonset_value
i = startrow
Do Until i >= endrow
'scan down TeTTime' column to find nearest look of interest
rttime = asht.Cells(i, timecol).Value
Debug.Print "rttime=" & rttime
Debug.Print "To string: " & CStr(CDec(rttime))
rtdelta = CDec(Right(rttime, 9)) - CDec(Right(wavonset_value, 9)) 'searchcol="AOISlide2"
Debug.Print "rtdelta=" & rtdelta
If rtdelta >= AOItime_start Then
Exit Do
End If
i = i + 1
Loop
GetAOIRowStart = i
'Debug.Print asht.Cells(i, sound_playing_col).Value
End Function
答案 0 :(得分:1)
您的问题与变量的大小有关。如果rttime
为Single
,则该值不足以容纳您需要的数据。将变量类型更改为Double
可以解决问题。
作为一个拇指规则,除非你有非常严格的内存限制,否则使用Long
来保存整数值,使用Double
来保存浮点值。保留Decimal
类型以进行非常精确的计算。我还建议您避免使用Variant
类型。