2016-03-09 65 views
0

我目前正在編寫一個返回NaN的函數。部分參與我發現只有一個錯誤來源。在谷歌應用腳​​本中使用函數時的NaN值

下面是相關的代碼返回楠:

function test() { 
    Logger.log(howMuchDamage([[808, 404], [1814, 2595, 0], 0.3869, 0.6802, 0.103, 1], [100000, 10875, [0, 0], [0.1, 0.1], 0, 0], ["FT", "IE", [0, 0.2], 0.2075 * 3, 0.0208 * 3, 0, 0], [0.05], [0.05, 0.05], [0.2,0.05])) 
} 

function test2() { 
    Logger.log(tooltipNumber("FT", [0, 0.2], 0.2075 * 3, 0,0208 * 3, 0, 0, [1814, 2595, 0], [808, 404])) 
} 

function howMuchDamage(attackerStats, targetStats, abilityData, multiplicative, additive, critIncrease) { 
    var damage = 0 
    var crit = 0 
    var hit = didItHit(attackerStats[5], targetStats[2], abilityData[0]) 
    if(hit === 1) { 
    damage = tooltipNumber(abilityData[0], abilityData[3], abilityData[4], abilityData[5], abilityData[6], attackerStats[1], attackerStats[0]) 
    crit = didItCrit(attackerStats[3] + critIncrease[0], targetStats[4], abilityData[1]) 
    if(crit === 1) { 
     damage *= criticalDamage(attackerStats[4] + critIncrease[1], attackerStats[3] + critIncrease[0]) 
    } 
    else if (crit === -1) { 
     crit = 0 
     damage *= (1 - targetStats[5]) 
    } 
    //Multiply damage by the multipliers through an array with all the relevant multipliers and apply DR. 
    damage *= multiplicativeMultiplier(multiplicative, additiveMultiplier(additive)) * (1 - totalDR(targetStats[2], targetStats[1], abilityData[1], abilityData[2])) 
    } 
    return [1, damage, crit, hit] 
} 

function tooltipNumber(type, coefficient, StdHPmin, StdHPdiff, AMP, bonus, weaponDamage) { 
    if(type === "MR") { 
    return coefficient * bonus[0] + (1 + AMP) * (Math.random() * weaponDamage[1] + weaponDamage[0]) + baseDamageValue * (Math.random() * StdHPdiff + StdHPmin) 
    } 
    else if(type === "FT") { 
    return coefficient * bonus[1] + baseDamageValue * (Math.random() * StdHPdiff + StdHPmin) 
    } 
    else if(type === "heal") { 
    return coefficient * bonus[2] + baseHealingValue * (Math.random() * StdHPdiff + StdHPmin) 
    } 
    else { 
    return coefficient * bonus[1] + baseDamageValue * (Math.random() * StdHPdiff + StdHPmin) 
    } 
} 

howMuchDamage應該返回號碼的列表(整數的一切,但傷害)。 damage是NaN。

我已將問題簡化爲damage = tooltipNumber(abilityData[0], abilityData[3], abilityData[4], abilityData[5], abilityData[6], attackerStats[1], attackerStats[0])。我試圖將其更改爲damage = 5000,它仍然返回NaN。 tooltipNumber也正在返回NaN。一切似乎都很好。只增加浮游物或整數。唯一的字符串在if條件中。

+0

的谷歌應用程序腳本是什麼這個問題?如果我沒有遺漏任何東西,這是純粹的JavaScript。 – Adelin

+0

@Adelin - 主要在Google Apps腳本中完成,但我知道Javascript,兩者幾乎完全相同。而Logger.log是GAS,而不是Javascript。 我只是無法找到究竟是什麼導致我得到一個NaN,當我使用的一切都是數字。 –

+0

無論如何,我想幫助查明問題,但如果沒有'didItHit','multiplicativeMultiplier'和其他類似的功能,我會在那裏看到我無法複製我身邊的錯誤。你傳遞一些字符串給函數。也許其中一個在這些計算中被錯誤地視爲數字,這就是爲什麼你會得到'NaN' – Adelin

回答

1

看着the link with all the code後,我注意到了這個問題。

問題來自totalDR

你打電話時,你通過targetStats[2]作爲damageReduction 您使用此damageReduction後,將其添加到armorContribution

damageReduction是一個數組([0, 0]),所以你不能只是做damageReduction + armorContribution

這將返回NaN,需要固定..

+0

謝謝....但爲什麼'tooltipNumber'返回NaN。它沒有任何調用'totalDR'或其他任何東西。 –

+0

固定'totalDR'。並且它還修復了'damage = 5000'的howMuchDamage'。但'tooltipNumber'仍然被竊聽。 –

+0

而且我很笨......'test2'因爲我寫了太多參數而返回NaN ...逗號和點不一樣... –

相關問題