我正在嘗試編寫一個函數,該函數在將數值乘以10的負數冪時使用數組和split()
方法輸出正確的結果。例如,以下表達式可以得到正確的結果:1x10^-2 = 0.01
1x10^-4 = 0.0001
。使用數組進行負指數的基本計算
問題是當數的長度是優於指數值(請注意,我的代碼把num
作爲字符串到它在陣列分割如圖代碼波紋管:
//var num is treated as a string to be splited inside get_results() function
//exponent is a number
//Try different values for exponent and different lengths for num to reproduce the problem
//for example var num = 1234 and var exponent = 2 will output 1.234 instead of 12.34
var num = '1';
var sign = '-';
var exponent = 2;
var op = 'x10^'+sign+exponent;
var re = get_result(num);
console.log(num+op +' = '+ re);
function get_result(thisNum) {
if (sign == '-') {
var arr = [];
var splitNum = thisNum.split('');
for (var i = 0; i <= exponent-splitNum.length; i++) {
arr.push('0');
}
for (var j = 0; j < splitNum.length; j++) {
arr.push(splitNum[j]);
}
if (exponent > 0) {
arr.splice(1, 0, '.');
}
arr.join('');
}
return arr.join('');
}
演示這裏:https://jsfiddle.net/Hal_9100/c7nobmnj/
我嘗試了不同的方法來獲得正確的結果,其長度和exponent
的值不同,但是我沒有找到合適的值,所以我沒有想到其他任何東西。
你可以在這裏看到我的最新嘗試:https://jsfiddle.net/Hal_9100/vq1hrru5/
任何想法如何我可以解決這個問題?
PS:我知道由於JavaScript浮點轉換造成的大部分舍入錯誤是非常無害的,可以使用toFixed(n)
或使用專門的第三方庫來修復,但我唯一的目標是在編寫純javascript功能。
謝謝!我不知道爲什麼我沒有想到它。現在它工作得很好! –