如何确保带小数的数字在VBA中包含精确的两位小数?

这个问题涉及VBA编程

我使用的数据types是Double ,因为数据typesDecimal不被编译器识别。 这是一个贡献的问题。

 Private Number1 as Double Number1 = (read from a data source which contains 2 decimals) Number1 = 0.15 * Number1 '#client needs to have a 0.15 multiplier for Number1. This multiplication causes number format problems. Number1 = Round(Number1, 2) Number1 = formatNumber(Number1, 2) 

不起作用。 输出中的Number1仍然只剩下两位小数。

有没有一个简单的预build库解决这个问题? 或者我应该做一个自定义的方法来格式化数字? build立这个自定义方法的build议方法是什么?

在下面的示例中,您可以看到在round()函数之后的Number1中只剩下2 Number1数,或者在另一个类似的函数中

 Sub test() Dim Number1 As Double Dim FX As Object: Set FX = WorksheetFunction Number1 = 0.15 * 1.236: Debug.Print Number1 'return 0.1854 Number1 = 0.15 * 1.236: Number1 = Round(Number1, 2): Debug.Print Number1 'return 0.19 Number1 = 0.15 * 1.236: Number1 = FX.Round(Number1, 2): Debug.Print Number1 'return 0.19 Number1 = 0.15 * 1.236: Number1 = FX.RoundUp(Number1, 2): Debug.Print Number1 'return 0.19 Number1 = 0.15 * 1.236: Number1 = FX.RoundDown(Number1, 2): Debug.Print Number1 'return 0.18 Number1 = 0.15 * 1.236: Number1 = FX.Ceiling(Number1, 0.01): Debug.Print Number1 'return 0.19 Number1 = 0.15 * 1.236: Number1 = FX.Floor(Number1, 0.01): Debug.Print Number1 'return 0.18 End Sub 

testing

在这里输入图像说明


所以你的代码应该工作正常,问题必须在其他地方(例如单元格格式)。

如果您需要使用小数types,则可以声明为变体并进行转换。

 Dim d As Variant d = CDec(3.14) 

在猜测虽然,但在我看来,虽然,你的代码片断是不是在这里的错误….也许..

在我看来,在这个函数被调用之后,你正在从一个double转换到另外一个你需要集中精力的地方,而不是在这个函数中。