Вот сценарий: я получаю, .9999999999999999
когда должен 1.0
.
Я могу позволить себе потерять десятичный знак точности, поэтому я использую .toFixed(15)
, какие работы.
Округление работает, но проблема в том, что мне дали 1.000000000000000
.
Есть ли способ округлить до числа десятичных знаков, но убрать лишние пробелы?
Примечание: .toPrecision
это не то, что я хочу; Я только хочу указать, сколько чисел после десятичной точки.
Примечание 2: я не могу просто использовать, .toPrecision(1)
потому что мне нужно поддерживать высокую точность для чисел, которые на самом деле имеют данные после десятичной точки. В идеале должно быть столько десятичных знаков, сколько необходимо (до 15).
Ответы:
>>> parseFloat(0.9999999.toFixed(4)); 1 >>> parseFloat(0.0009999999.toFixed(4)); 0.001 >>> parseFloat(0.0000009999999.toFixed(4)); 0
источник
-2.34.toFixed(1)
возвращает-2.3
из-за приоритета оператора .parseFloat
функция:+number.toFixed(13)
это выражение также можно использовать для удаления неточностей в числах JavaScript, например, 1.0000000000000045.Да, выход есть. Использовать
parseFloat()
.parseFloat((1.005).toFixed(15)) //==> 1.005 parseFloat((1.000000000).toFixed(15)) //==> 1
См. Живой пример здесь: http://jsfiddle.net/nayish/7JBJw/
источник
parseFloat("0.0000007")
, что дает"7e-7"
Насколько я понимаю, вы хотите удалить завершающие нули в строке, которую вы получили через
toFixed()
. Это чистая строковая операция:var x = 1.1230000; var y = x.toFixed(15).replace(/0+$/, ""); // ==> 1.123
источник
...replace(/\.?0+$/, "");
).0
становится пустой строкой""
и-0
становится-
, ни то, ни другое не ожидается (предположительно). @ zach-snow ваше предложенное решение также не работает на 0 и -0.Number(n.toFixed(15)) or +(n.toFixed(15))
преобразует десятичную строку из 15 знаков в число, удаляя конечные нули.источник
Если вы приведете возвращаемое значение к числу, эти конечные нули будут отброшены. Это также менее многословно, чем
parseFloat()
есть.+(4.55555).toFixed(2); //-> 4.56 +(4).toFixed(2); //-> 4
При этом используется унарный оператор + , так что если использовать это как часть операции строки вам необходимо иметь инфикс + перед ним:
var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));
. К вашему сведению, унарный + перед строкой преобразует ее в число. Из MDN: Unary + может:источник
+(4.1).toFixed(4)
находится4.1
в Chrome 60 .Ни один из них не дал мне то, что я искал, исходя из заголовка вопроса, который, например, был для 5.00 равным 5 и 5.10 для 5.1. Мое решение было таким:
num.toFixed(places).replace(/\.?0+$/, '') '5.00'.replace(/\.?0+$/, '') // 5 '5.10'.replace(/\.?0+$/, '') // 5.1 '5.0000001'.replace(/\.?0+$/, '') // 5.0000001 '5.0001000'.replace(/\.?0+$/, '') // 5.0001
Примечание. Регулярное выражение работает, только если
places > 0
PS https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
источник
5e30
(меняет номер на5e3
). Угловые шкафы дьявольски!Есть лучший метод, который сохраняет точность, а также удаляет нули. Для этого нужно ввести число, и с помощью некоторой магии кастинга удаляются любые конечные нули. Я обнаружил, что 16 - это предел точности для меня, что неплохо, если вы не будете помещать спутник на плутон.
function convertToFixed(inputnum) { var mynum = inputnum.toPrecision(16); //If you have a string already ignore this first line and change mynum.toString to the inputnum var mynumstr = mynum.toString(); return parseFloat(mynumstr); } alert(convertToFixed(6.6/6));
источник
toFixed()
Метод форматирует сnumber
использованием нотации с фиксированной точкой, и возвращаетstring
.Он применяет стратегию округления до половины .
(0.124).toFixed(2); // returns 0.12 (0.125).toFixed(2); // returns 0.13
Как вы описали, это действительно также иногда приводит к (потенциально ненужным) конечным нулям.
(0.001).toFixed(2); // returns 0.00
Возможно, вы не захотите избавляться от этих конечных нулей, по сути, вы можете просто преобразовать их обратно в
number
. Есть много способов сделать это.+(0.001).toFixed(2); // the shortest
Для обзора различных методов преобразования строк в числа, пожалуйста, проверьте этот вопрос, на который есть отличные ответы.
источник