Есть ли способ усечь числа в научной записи в Javascript?

Как вы все знаете, поскольку это одна из наиболее часто задаваемых тем в SO, у меня возникают проблемы с ошибками округления (на самом деле это не ошибки, мне хорошо известно). Вместо того, чтобы объяснять свою точку зрения, я приведу пример того, какие возможные числа у меня есть и какие входные данные я хочу получить:

Скажем

var a = 15 * 1e-9;
alert(a)

выходы

1.5000000000000002e-8

Я хочу получить вместо этого 1.5e-8, но я не могу просто умножить на 10e8, округлить и разделить на 10e8, потому что я не знаю, будет ли это e-8 или e-45 или что-то еще.

Итак, в основном я хочу получить часть 1.5000002, применить toFixed(3) и вернуть экспоненту.

Я мог бы преобразовать в строку и проанализировать, но это просто не кажется правильным ...

Любая идея ?


(Заранее прошу прощения, если вы считаете, что это один из многих дубликатов, но я не смог найти похожий вопрос, только связанные)

Гаэль


person Gabriel S.    schedule 28.01.2011    source источник


Ответы (2)


Вы можете использовать метод toPrecision:

var a = 15 * 1e-9;
a.toPrecision(2); // "1.5e-8"
person Christian C. Salvadó    schedule 28.01.2011
comment
Это, как описано в документации, дает вам строку (typeof a ==); отлично подходит для вывода. Если вы хотите вернуть число, вы можете var b = 1 * a.toPrecision(2); Остерегаться округления в середине вычисления. - person Stephen P; 28.01.2011
comment
@ Стивен, да, или var b = +a.toPrecision(2);, или var b = Number(a.toPrecision(2)); - person Christian C. Salvadó; 28.01.2011
comment
Не ожидал легкого решения! В следующий раз я загляну в документацию подробнее! - person Gabriel S.; 28.01.2011

Если вы занимаетесь научной работой и вам нужно округлить с учетом значимых цифр: Округление до произвольного числа значащих цифр

person Ates Goral    schedule 28.01.2011