Как выводить при использовании toFixed не нули, а конкретные числа, если после запятой много нулей?
Сейчас есть числа, которые округляются до toFixed(3), но если оно меньше 0.001, до 8 знаков. Но все равно бывает, что выводится 0.00000000, т.к. последующие числа идут далее. Можно ли сделать какой-то адаптивный toFixed в зависимости от количества нулей после запятой? Отображать мне 13.23414351534526 неинтересно (округляю их до 13.234), но вот в случае 0.00000000134252641 хотелось бы видеть число до первых двух чисел, отличающихся от нуля (0.0000000013)... Благодарю. Спрашиваю, т.к. не хотелось бы делать кучу if, но если нет способа иного, сделаю так...
Ответы (1 шт):
Вообще говоря из-за особенностей хранения чисел с плавающей точкой задача не имеет корректного решения для чисел типа 2.05, которое хранится как 2.04999999999
Ну и код просто откусывает две первых значащих цифры, а не округляет. Если нужно именно округление, т.е. из 2.549 получить 2.55, то нужно будет код переписать
function adaptiveFixed(num, needNonZero) {
let res = Math.trunc(num);
let frac = Math.abs(num - res);
if (frac === 0)
return res;
res += '.';
let numNonZero = 0;
while (frac !== 0 && numNonZero < needNonZero) {
frac *= 10;
const cur = Math.floor(frac);
res += cur;
frac -= cur;
if (cur !== 0)
numNonZero++;
}
return res;
}
console.log(adaptiveFixed(-2.5, 2));
console.log(adaptiveFixed(2.52345, 2));
console.log(adaptiveFixed(2.05, 2));
console.log(adaptiveFixed(2.000000000000052345, 2));