使用Google Apps脚本时,是否存在使用虚假数学结果的问题?以下是代码,其中a / b / c是从另一个函数发送的。使用记录器验证A / b / c。 ? StartPt很好,但是endpt正在生成一个假值。
function calcTime(a,b,c) {
var x;
var startHr = 8;
var startMin = 0;
var startSec=0;
var startPt;
var endPt;
startPt = (startHr * 60) + startMin + (startSec/60);
endPt = (a * 60) + b + (c/60);
Logger.log(endPt);
x = endPt -startPt;
return x;
}
flag
我发现数学误差是乘法因子100(当计算endPt时,它将结果乘以100)。什么可能导致这种情况?
答案 0 :(得分:2)
实数运算很容易在javascript和apps脚本中舍入错误。见Is floating point math broken?。如果你在调试器中观察你的功能,你会看到舍入错误。与(c/60)
。但这不太可能导致100倍的误差。
最有可能的是,你的参数不是你的意思。例如,如果b
作为字符串到达,则(a * 60) + b + (c/60)
的计算将有效地忽略b。但是,其他两个参数将更改为数字以完成乘法和除法运算。 (您可以使用b * 1
来避免这种情况。)
无论如何,要确认您获得的参数是什么,请尝试用此替换函数的前几行:
function calcTime(a,b,c) {
var params = {
a:{type:typeof a, value:a},
b:{type:typeof b, value:b},
c:{type:typeof c, value:c}}
Logger.log(params);
var x;
...
验证您是否得到了所需的信息。例如,如果任何参数作为日期对象到达,那么您的数学将非常不正确。您可能只需要为数据源强制执行类型。