如何在VBA中截断一个Double

时间:2018-05-31 15:17:34

标签: excel vba excel-vba truncate

我在VBA中有一个变量,我需要将其截断为4位有效数字。我似乎找不到任何不会向上或向下舍入数字的东西。但我只想删除第4位重要人物之后的数字。我试过了,

compressibility = round(compress, -3 - (Int(Log(Abs(compress)))))

它删除了第4位后的数字,但仍然将数字向上舍入。

Compress是一个大约0.000245848385的数字作为例子,我需要压缩率为0.0002458。

任何建议都会很棒!感谢。

4 个答案:

答案 0 :(得分:4)

尝试此功能:

Function RoundSignificant(ByVal dValue As Double, iFigures As Integer)
    Dim dSig As Double
    dSig = Abs(dValue)
    dSig = Application.Log10(dSig)
    dSig = 1 + Int(dSig)
    dSig = iFigures - dSig
    RoundSignificant = Round(dValue, dSig)
End Function


Sub test()
    Debug.Print RoundSignificant(0.000245848385, 4)
End Sub

答案 1 :(得分:0)

使用工作表函数:

=VALUE(TEXT(compress,"0.000E+00"))

对于VBA

CDbl(Format(compress,"0.000E+00"))

希望有所帮助。

答案 2 :(得分:0)

在我看来,你想避免四舍五入,但不要四舍五入,因为四舍五入应该产生你想要的确切结果。因此,您可以使用Excel WorksheetFunction.RoundDown 方法来实现所需的结果,而不是使用VBA Round 函数。

ROUNDDOWN(0.0002458的 6 548385; 7)= 0.000245800000 ROUNDDOWN(0.0002458 <强> 3 548385; 7)= 0.000245800000

答案 3 :(得分:0)

Sub test()
Dim compress As Double
compress = 0.000245858

Dim compressibility As Double
compressibility = Int(compress * 10 ^ -(Int(Log(Abs(compress))) - 3)) / 10 ^ -(Int(Log(Abs(compress))) - 3)

Debug.Print compressibility
End Sub