这个问题涉及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个小数。
这个问题是否有一个简单的预建库解决方案?或者我应该使用自定义方法格式化数字?建议自定义方法的推荐方法是什么?
答案 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
测试
所以你的代码应该工作正常,问题必须在其他地方(例如在单元格格式中)。
答案 1 :(得分:0)
如果您需要使用小数类型,您可以声明为变体并进行转换。
Dim d As Variant
d = CDec(3.14)
虽然猜测,它看起来对我来说,你的代码片段在这里没有错......也许..
在我看来,在调用此函数后,您将从双精度转换为其他需要集中精力的东西 - 而不是在此函数内部。