Я пытаюсь написать функцию, которая выводит правильный результат при умножении числа на отрицательную мощность десяти с использованием массивов и 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/
Я пробовал различные подходы, чтобы получить правильные результаты с различными num
длиной и exponent
значения, но я ничего не пришел с обработанным и я пришел к тому, что я не могу думать ни о чем друг.
Вы можете увидеть мою последнюю попытку здесь: https://jsfiddle.net/Hal_9100/vq1hrru5/
Любая идея, как я мог решить эту проблему?
PS: Я знаю, что большинство ошибок округления из-за преобразования с плавающей запятой javascript довольно безвредны и могут быть исправлены с использованием toFixed(n)
или с использованием специализированных сторонних librairies, но моя единственная цель здесь - лучше писать чистый javascript функции.
Спасибо! Я не знаю, почему я не думал об этом. Теперь он отлично работает! –