0

Google Apps Script を使用しているときに、誤った数学の結果に問題があった人はいますか? 以下は、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 分の 1 のエラーを引き起こす可能性は低いです。

ほとんどの場合、パラメーターはあなたが思っているものではありません。たとえばb、 が文字列として到着した場合、 の計算で(a * 60) + b + (c/60)は実質的に b が無視されます。ただし、他の 2 つのパラメーターは数値に変更され、乗算と除算の操作が完了します。(を使用することで回避できます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 に答える