Vba 在visualbasic中停止十进制截断
如何在VisualBasic中阻止小数被截断,并在科学记数法中将其保留为完整的小数而不是截断的数字 我从am Excel宏中得到了一些代码,我正在为某人修改这些代码(只有Debug.Print语句是我的): Debug.Print语句为我提供:Vba 在visualbasic中停止十进制截断,vba,excel,Vba,Excel,如何在VisualBasic中阻止小数被截断,并在科学记数法中将其保留为完整的小数而不是截断的数字 我从am Excel宏中得到了一些代码,我正在为某人修改这些代码(只有Debug.Print语句是我的): Debug.Print语句为我提供: rttime=1.343301E+12 To string: 1343301000000 rtdelta=0 所以基本上,这里发生的事情是,从Excel工作表中以科学表示法提取值,而该表示法中未显示的所有内容都被截断 实际数字应该是1343300687
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
您的问题与变量的大小有关。如果
rttime
是Single
,它不够大,无法容纳所需的数据。将变量类型更改为Double
应该可以解决此问题
根据经验,除非内存限制非常紧,否则使用
Long
保存整数值,使用Double
保存浮点值。保留Decimal
类型,以便进行非常精确的计算。我还建议您避免使用变量类型。您的问题与变量的大小有关。如果rttime
是Single
,它不够大,无法容纳所需的数据。将变量类型更改为Double
应该可以解决此问题
根据经验,除非内存限制非常紧,否则使用
Long
保存整数值,使用Double
保存浮点值。保留Decimal
类型,以便进行非常精确的计算。我还建议您避免使用变量类型。我认为这与Excel的数字精度有关(顺便说一句,这不是很好)。。。Excel中非常大(或非常小)的数字是truncated@Barranka实际上,我已将电子表格设置为不截断数字。在电子表格中,它显示了整数、小数和all。这是rttime
的类型?(我试图重现这种情况)所有三个编号的变量都是单变量。将它们声明为双变量。我认为这与Excel的数值精度有关(顺便说一句,这不是很好)。。。Excel中非常大(或非常小)的数字是truncated@Barranka实际上,我已将电子表格设置为不截断数字。在电子表格中,它显示了整数、小数和all。这是rttime
的类型?(我试图重现这种情况)所有三个编号的变量都是单变量。将它们声明为双变量。谢谢!我们在昨晚的评论中也发现了这一点。我从一个不再在我们实验室工作的人那里继承了这段代码,我只是做了一些修改,但是这里使用了一些非常糟糕的实践。谢谢!我们在昨晚的评论中也发现了这一点。我从一个不再在我们实验室工作的人那里继承了这段代码,我只是做了一些修改,但这里使用了一些非常糟糕的实践。
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