Я новичок в JavaScript и просто обнаружили toFixed()
и toPrecision()
в круглых цифрах. Однако я не могу понять, в чем разница между ними.
В чем разница между number.toFixed()
и number.toPrecision()
?
источник
Я новичок в JavaScript и просто обнаружили toFixed()
и toPrecision()
в круглых цифрах. Однако я не могу понять, в чем разница между ними.
В чем разница между number.toFixed()
и number.toPrecision()
?
toFixed(n)
обеспечивает n
длину после десятичной точки; toPrecision(x)
обеспечивает x
общую длину.
Ссылка на w3schools: toFixed и toPrecision
РЕДАКТИРОВАТЬ :
Некоторое время назад я узнал, что w3schools не совсем лучший источник, но я забыл об этом ответе, пока не увидел "восторженный" комментарий kzh. Вот дополнительные ссылки из Mozilla Doc Center дляtoFixed()
и дляtoPrecision()
. К счастью для всех нас, MDC и w3schools согласны друг с другом в этом случае.
Для полноты я должен упомянуть, что toFixed()
это эквивалентно toFixed(0)
и toPrecision()
просто возвращает исходное число без форматирования.
toPrecision(x)
не «обеспечиваетx
общую длину», он форматируется до числа заданных значащих цифр. Например,0.0000022.toPrecision(1)
вернется0.000002
.toPrecision(x)
обеспечиваетx
общую длину». не обязательно выполняется. Пример счетчика:0.00001234.toPrecision(3)
Я считаю, что первый дает вам фиксированное количество десятичных знаков, тогда как последний дает фиксированное количество значащих цифр.
Кроме того,
toPrecision
будет получено научное представление, если в числе больше целых цифр, чем указанная точность.РЕДАКТИРОВАТЬ: О, и если вы новичок в JavaScript, я очень рекомендую книгу Дугласа Крокфорда « JavaScript: хорошие части ».
источник
Примеры говорят ясно:
источник
Я думаю, что на это лучше всего ответить на примере.
Допустим, у вас есть следующие данные:
Вы хотите отображать каждый из этих продуктов с названием и ценой в формате. Давайте
toPrecision
сначала попробуем использовать :Выглядит неплохо, поэтому вы можете подумать, что это будет работать и для других продуктов:
Не так хорошо, как хотелось бы. Мы можем исправить это, изменив количество значащих цифр для каждого продукта, но если мы перебираем массив продуктов, это может быть сложно.
toFixed
Вместо этого воспользуемся :Это дает то, что вы ожидали. Здесь нет никаких догадок и округления.
источник
Просто:
источник
При определенных обстоятельствах
toPrecision()
вернет экспоненциальную запись, аtoFixed()
не вернет.источник
toExponential()
это отдельная функция .a = 999999999999999934464;
,a.toFixed(0)
возвращает"1e+21"
. Возможно, более точным ответом будет то, что toFixed () не возвращает экспоненциальную запись, если не toString ().Например, мы рассматриваем переменную a как, var a = 123.45 a.toPrecision (6) Результатом будет 123.450 a.toFixed (6) Результат будет похож на 123.450000 // 6 цифр после десятичной точки
источник
Оба
toPrecision()
иtoFixed()
являются функциями , предназначенными для форматирования номера перед печатью его. Итак, они оба возвращаютString
значения.Есть одно исключение. Если вы используете эти функции с отрицательным числовым литералом, из-за приоритета оператора возвращается число. Это означает, что
toFixed()
илиtoPrecision()
сначала вернет строку, а затем-
оператор минус преобразует строку обратно в число как отрицательное значение. См. Пример ниже.toPrecision()
возвращаетString
представление объекта Number в формате с фиксированной запятой или экспоненциальной нотации, округленное до значащих цифр. Поэтому, если вы укажете, что вам нужна точность 1, он возвращает первое значащее число вместе с научным представлением, чтобы указать степень 10 или предыдущие 0 перед его десятичной точкой, если значащее число <0.toFixed()
возвращает,String
представляющий объект Number в нотации с фиксированной запятой, с округлением в большую сторону. Эта функция заботится только о числах десятичной точки.Выше я упоминал об исключении, когда использование этих функций для литералов отрицательных чисел возвращает число, а не строку из-за приоритета оператора. Вот некоторые примеры:
Интересный факт: есть нули со знаком, как видно из
-0.0456.toFixed(1)
Смотрите: +0 и -0 - это одно и то же?
источник