VBScript除以十进制整数返回多余的余数

时间:2018-07-03 13:09:43

标签: vbscript integer decimal division

我正在尝试验证将输入值除以1440的VBScript函数。当我将43.56作为输入参数传递时,它将返回以下结果:

0.030250000000000002

正确答案是

0.03025

我应该怎么做才能使它正确地使用均分的整数(例如1440/1440 = 1)以及一个值是十进制数的情况。 目前,我的功能如下:

Function convertMinutesToDays(value)
    If IsNumeric(value) And TypeName(value) <> "Boolean" Then
        convertMinutesToDays = value / 1440
    Else
        convertMinutesToDays = 0
    End If
End Function

实际上,如果仅将Response.Write convertMinutesToDays(43.56)放进去,它将显示0.03025,但是我们在一个断言javascript方法中使用它,如下所示:

Call AssertAreEqual(convertMinutesToDays(43.56), 0.03025, "convertMinutesToDays: pass 43.56 should return 0.03025")

javascript代码:

<script language="JavaScript" runat="server">
    function AssertAreEqual(val1, val2, message)
    {
        var retVal = false;
        var divAttributes = "";
        var equality = "";
        if (val1 === val2)
        {
            divAttributes = "class=\"unittest assertareequal pass\"";
            equality = "=";
            retVal = true;
        }
        else
        {
            divAttributes = "class=\"unittest assertareequal fail\"";
            equality = "!=";
            retVal = false;
        }
        Response.Write("<div " + divAttributes + ">Actual:" + val1 + " " + equality  + " " + val2 + ":Expected | " + message + "</div>");
        return retVal;
    }
</script>

输出:

Actual:0.030250000000000002 != 0.03025:Expected | convertMinutesToDays: pass 43.56 should return 0.03025

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是由于浮点数学在VBScript中起作用的方式(实际上大多数语言都是如此)。对于您的代码,Round函数就足够了,因为您总是用一个数字除,因此舍入错误不会像其他类型的函数那样累加您。我选择了5个小数位,因为它可以解决您的示例。如果您发现其他人仍然休息,那么您可能需要提高休息时间,但代表5天的休息时间可能就足够了。

Function convertMinutesToDays(value)
    If IsNumeric(value) And TypeName(value) <> "Boolean" Then
        convertMinutesToDays = Round(value / 1440, 5)
    Else
        convertMinutesToDays = 0
    End If
End Function