Как float с буквой преобразовать в строку
Подскажите как на выводе float число сделать виде строки?
toFixed не подходит, так как числа после точки может быть разным.
нужно из "4.7e-7" сделать "0.00000047"
let num = [
0.00000047.toString(),
0.00000047.toFixed(8), // не подходит, так как неизвестно количество цифр
];
console.log(num);
Ответы (2 шт):
Автор решения: yar85
→ Ссылка
Запись числа "с буквой" называется экспоненциальной.
aeb === a * 10b
let num = [
0.00000047.toString(),
0.00000047.toFixed(8), // не подходит, так как неизвестно количество цифр
stupidStrReplace(0.00000047), // функция принимает число и как number...
stupidStrReplace('4.7e-7'), // ...и как string (только в виде '123', '1.23', '123.', '.23', '1.23e4', или '.23e4')
];
console.log(num);
function stupidStrReplace(n) {
let [mnts, exp] = String(n).split(/e/i);
if (!isFinite(+mnts)) return NaN;
if (!(exp = +exp)) return mnts;
const [int = '0', dec = ''] = mnts.split('.');
return (exp > 0)
? int + dec.padEnd(exp, '0')
: '0.' + int.padStart(Math.abs(exp), '0') + dec;
}
Автор решения: Tina Gordienko_Drog
→ Ссылка
получаем число (leftPart) и степень, в которую нужно подносить 10 (rightPart) + форматируем вывод
const str = '4.7e-7';
const eIndex = str.indexOf('e');
const leftPart = parseFloat(str.slice(0, eIndex)); // 4.7
const rightPart = parseInt(str.slice(eIndex + 1)); // -7
let result = leftPart * Math.pow(10, rightPart);
if (rightPart < 0) {
result = result.toFixed(Math.abs(rightPart) + 1);
}
console.log(result);