我正在尝试验证将输入值除以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
有什么想法吗?
答案 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