0

有人在使用 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)。什么可能导致这种情况?

4

1 回答 1

2

实数算术在 javascript 和 apps-script 中容易出现舍入错误。请参阅浮点数学是否损坏?. 如果您在调试器中查看函数,您会看到舍入错误,尤其是。与(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;
  ...

确认你得到了你需要的东西。例如,如果任何参数作为日期对象到达,那么您的数学将非常不正确。您可能只需要为您的数据源强制执行类型。

于 2013-01-27T03:47:32.383 回答