Используя JavaScript, как использовать функцию .toExponential (), но только с двумя десятичными разрядами (9.99e9 вместо 9.9999e9) - PullRequest
1 голос
/ 19 марта 2020

Если у меня есть переменная, которая установлена ​​в 2345, и я хочу преобразовать ее в экспоненциальную, я просто делаю variableName.toExponential (). Replace (/ e +? /, 'E'), что даст мне 2,345e3 , Тем не менее, я хочу, чтобы он возвращал там только два десятичных знака, потому что в противном случае, когда я доберусь до гораздо больших чисел, например 183947122, я получу длинный десятичный знак 1.83947122e8. Я хочу довести это до уровня 1.83e8, но не могу понять, куда бы я поместил variable.toFixed (2) в этом коде.

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Вы можете сделать это с помощью регулярного выражения и replace (который вы уже используете для замены e+ на e):

const str = variableName.toExponential().replace(/^(\d*\.\d{0,2})\d*e\+(\d+)$/, "$1e$2");

, который захватывает целую часть числа коэффициент плюс до двух дробных цифр, игнорирует любые другие и фиксирует полный показатель степени; он заменяет совпадение на $1$2, поэтому у вас остаются только две цифры коэффициента:

function test(variableName) {
    const raw = variableName.toExponential();
    const str = raw.replace(/^(\d*(?:\.\d{0,2})?)\d*e\+(\d+)$/, "$1e$2");
    console.log(variableName, "=>", raw, "=>", str);
}

test(2345);
test(100);
test(1019);
test(183947122);
0 голосов
/ 19 марта 2020

Вы можете рассчитать значение этажа и затем применить toExponential.

const f = (x, p) => {
    const l = 10 ** (Math.floor(Math.log10(Math.abs(x))) - p);
    return (Math.floor(x / l) * l).toExponential(p);
}

console.log(f(183947122, 2));
console.log(f(-183947122, 2));
console.log(f(183947122, 4));
0 голосов
/ 19 марта 2020

var a=1233434;
console.log(a.toExponential(2));

Вы можете передать параметр в функцию .toExponential (2) для округления. После десятичной дроби вы получите 2 числа после десятичной проверки этой ссылки https://www.geeksforgeeks.org/javascript-toexponential-function/

...