2014-04-01 63 views
3

我有一個包含三列的電子表格。所有的數字都在華氏專欄中,另外兩個是從函數中填充的。Google App腳本自定義函數中的錯誤

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使用華氏柱,C2F

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

攝氏和ComputedFahrenheit列使用這些函數填充使用攝氏度列。

我看不到問題!

項目重點:MESQb2p_hPY7vMP_LZjizjHo2ajWN_uqm

SDC重點:df47e1281fe5caea

回答

3

好,所以這似乎是與自定義的新谷歌表錯誤在其參數中有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付諸實施。讓我知道如果這有效!

+0

當我重新加載時,它顯示40,然後返回到錯誤顯示。 – user3236820

0

我剛剛重新創建電子表格和職能和第14行,我得到:

40 4.44444444444444 40

我建議你請嘗試:

  1. 創建一個新的電子表格

  2. 創建一個新的谷歌腳本文件

  3. 重新測試

+0

我創建了一個新的電子表格,新的腳本文件,並正確顯示。看到我的回答如下br1ckb0t – user3236820

相關問題