Google App Script自定义功能出错

时间:2014-04-01 23:49:03

标签: google-apps-script

我有一个包含三列的电子表格。所有数字都在华氏温度列中,其他两个数字都来自函数。

Fahrenheit  Celsius ComputedFahrenheit
-200
-180
-160
-140
-120
-100
-80
-60
-40
-20
0
32
40
60
80
100
120
140
160
180
200

使用以下函数填充Celsius和ComputedFahrenheit列:

function f2c(fahrenheit) {
  if (typeof(fahrenheit) !== "number") {
    Logger.log(typeof(fahrenheit));
    throw "Fahrenheit column must contain numbers";
  }

  var celsius = (fahrenheit - 32) * (5/9);
  return celsius;
}

function c2f (celsius) {
  if (typeof (celsius) !== "number") {
      throw "celsius must be a number";
  }

  var fahrenheit = (celsius*(9/5)) + 32;
  return fahrenheit;
}

除第14行外,所有单元格都显示正确的数据:

40     4.444444444      Error: Loading Data ..

注意:f2c使用Farenheit列,c2f使用Celsius列。

我看不出问题!

项目密钥:MESQb2p_hPY7vMP_LZjizjHo2ajWN_uqm

SDC密钥:df47e1281fe5caea

2 个答案:

答案 0 :(得分:3)

好的,所以这似乎是新版Google表格中与自定义函数相关的错误,这些自定义函数在其参数中有infinitely repeating decimals,可能与this similar bug有关。

我创建了spreadsheet using your functions and data。我发现刷新后该值会计算有时,其他时候会一直停留在加载状态。但是,如果您对c2f()f2c()的输出进行舍入,则代码可以返回所有时间。

此代码有效,最终会以相同的精度结束,就像您不对输出进行舍入一样:

ROUND = Math.pow(10, 12);

function f2c(fahrenheit) {
  if (typeof(fahrenheit) !== "number") {
    Logger.log(typeof(fahrenheit));
    throw "Fahrenheit column must contain numbers";
  }

  var celsius = (fahrenheit - 32) * (5/9);
  return Math.round(celsius * ROUND) / ROUND;
}

function c2f (celsius) {
  if (typeof (celsius) !== "number") {
      throw "celsius must be a number";
  }

  var fahrenheit = (celsius*(9/5)) + 32;
  return Math.round(fahrenheit * ROUND) / ROUND;
}

我已在the sheet that I created中实施了它。如果有效,请告诉我!

答案 1 :(得分:0)

我刚刚重新创建了您的电子表格和功能,在第14行我得到了:

40 4.44444444444444 40

我建议你试试:

  1. 制作新电子表格

  2. 制作新的Google脚本文件

  3. 重新测试