Vba 在visualbasic中停止十进制截断

Vba 在visualbasic中停止十进制截断,vba,excel,Vba,Excel,如何在VisualBasic中阻止小数被截断,并在科学记数法中将其保留为完整的小数而不是截断的数字 我从am Excel宏中得到了一些代码,我正在为某人修改这些代码(只有Debug.Print语句是我的): Debug.Print语句为我提供: rttime=1.343301E+12 To string: 1343301000000 rtdelta=0 所以基本上,这里发生的事情是,从Excel工作表中以科学表示法提取值,而该表示法中未显示的所有内容都被截断 实际数字应该是1343300687

如何在VisualBasic中阻止小数被截断,并在科学记数法中将其保留为完整的小数而不是截断的数字

我从am Excel宏中得到了一些代码,我正在为某人修改这些代码(只有Debug.Print语句是我的):

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

您的问题与变量的大小有关。如果
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