本來想好的運算程序是:
- 設定要二位小數。
- 用亂數出一個三位數。
- 將三位數除以十的二次方。
decimal_places = 2;
var factor = Math.pow(10, decimal_places);
var tempRandom = tools.makeRandomIndex(1, factor-1);
var r = Math.floor(Math.random()*tempRandom.length);
var n1 = tempRandom[r]/factor;
註:上面的 tools.makeRandomIndex 是我用來產生兩個參數指定範圍內所有數,並打亂順序的自訂函數。
看起來沒問題,但當我用同樣的方法取出另一個數 n2,並將 n1 與 n2 相加的結果設給 answer 這個變數以後。有時卻會出現二位小數加上二位小數,產生比二位還多很多位的小數,而且答案雖然趨近於相加的結果,卻不是正確的。
一開始還懷疑是自己的演算程序有問題,除蟲除半天, toFixed() 和 toPrecision() 也搬出來用了,還是怪怪的。
廢話不多說,後來修改了一下程序:
decimal_places = 2;
var factor = Math.pow(10, decimal_places);
var tempRandom = tools.makeRandomIndex(1, factor-1);
var r = Math.floor(Math.random()*tempRandom.length);
var n1 = tempRandom[r];
var tempRandom = tools.makeRandomIndex(1, factor-1);
var r = Math.floor(Math.random()*tempRandom.length);
var n2 = tempRandom[r];
var answer = (n1 + n2)/factor;
要給 answer 計算的 n1 和 n2 先不做除法(變成小數),等加完結果以後,再除10的二次方(本例中的 factor)。
程序調整以後,answer 的內容不會再出現小數多於二位的情形了。
沒有留言:
張貼留言