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

时间:2015-11-16 07:50:07

标签: excel vba excel-vba

这个问题涉及VBA编程

我使用的数据类型是Double,因为编译器无法识别数据类型Decimal。这是一个有贡献的问题。

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中仍然只剩下2个小数。

这个问题是否有一个简单的预建库解决方案?或者我应该使用自定义方法格式化数字?建议自定义方法的推荐方法是什么?

2 个答案:

答案 0 :(得分:1)

在下面的示例中,您可以看到Number1函数之后round()或其他类似函数中只剩下2位小数

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

测试

enter image description here

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

答案 1 :(得分:0)

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

Dim d As Variant
d = CDec(3.14)

虽然猜测,它看起来对我来说,你的代码片段在这里没有错......也许..

在我看来,在调用此函数后,您将从双精度转换为其他需要集中精力的东西 - 而不是在此函数内部。