0

我在 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 不准确。因此,operator mod 也没有给出可靠的结果。我希望你能给出如何处理这个问题并使用正确的变量。

4

1 回答 1

0

如果您正在处理不超过 4 位小数的分数,您可以尝试使用Currency数据类型。这有 4 个小数位,并使用整数计算。否则,您可以使用 a 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
于 2013-10-02T22:25:06.547 回答