在excel中使用VBA截断Double

Ehu*_*udz 12 double excel vba decimal-point excel-vba

我需要截断我的double值的小数位数,以便在文本框中显示.如何用vba实现这一目标?

Sid*_*out 12

您可以使用ROUND用于FORMAT在VBA

例如,显示2位小数

Dval = 1.56789

Debug.Print Round(dVal,2)

Debug.Print Format(dVal,"0.00")
Run Code Online (Sandbox Code Playgroud)

注意:上面会给你1.57.因此,如果您正在寻找,1.56那么您可以将Dval存储在一个字符串中,然后执行此操作

Dim strVal As String

dVal = 1.56789
strVal = dVal

If InStr(1, strVal, ".") Then
    Debug.Print Split(strVal, ".")(0) & "." & Left(Split(strVal, ".")(1), 2)
Else
    Debug.Print dVal
End If
Run Code Online (Sandbox Code Playgroud)

  • 切勿将数字视为文本。 (2认同)

Gar*_*ill 10

如果你想对值进行入,那么你可以使用Round函数(但要注意VBA的Round函数使用Banker的舍入,也称为round-to-even,它将向上或向下舍入5;使用传统舍入舍入,使用格式).

如果你想在没有舍入的情况下截断值,那么就不需要像接受的答案中那样使用字符串 - 只需使用数学:

Dim lDecimalPlaces As Long: lDecimalPlaces = 2
Dim dblValue As Double: dblValue = 2.345

Dim lScale = 10 ^ lDecimalPlaces
Dim dblTruncated As Double: dblTruncated = Fix(dblValue * lScale) / lScale
Run Code Online (Sandbox Code Playgroud)

这产生"2.34".


Mak*_*kah 6

您可以使用Int()函数. Debug.print Int(1.99543)

或更好:

Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
  Trunc = Int(value * (10 ^ num)) / (10 ^ num)
End Function
Run Code Online (Sandbox Code Playgroud)

所以你可以使用Trunc(1.99543, 4)==>result: 1.9954