我有一个包含三列的电子表格。所有数字都在华氏温度列中,其他两个数字都来自函数。
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
答案 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
我建议你试试:
制作新电子表格
制作新的Google脚本文件
重新测试