我在Excel-VBA中的代码如下:
Public Function ci(p As Double) As Long
Dim i As Long
i = 0
ci = 0
Do Until (p + i * 1.725) Mod 20 = 0
i = i + 1
ci = i
Loop
End Function
所以,结果并不真实,因为这种论坛让我知道变量类型double并不精确。因此,运营商mod也没有给出可靠的结果。 我希望你能给出如何处理这个问题并使用正确的变量。
答案 0 :(得分:0)
如果您处理的分数不超过4位小数,则可以尝试Currency
数据类型。这有4位小数,并使用整数计算。否则,您可以使用Decimal
,这是由以下人员分配的变体:
Dim vDecimal as Variant
vDecimal = CDec(0)
也使用整数计算,最多有28个小数位。
编辑:
这克服了Mod参数四舍五入:
Public Function ci(p As Currency) As Long
ci = 0
Do Until (p + ci * CCur(1.725)) * 1000 Mod 20000 = 0
ci = ci + 1
Loop
End Function