Math.round (цифра) по сравнению с num.toFixed (0) и несоответствиями браузера

Вы объявляете WhiteNav внутри function() { ... }, что означает, что он будет доступен только из этой функции.

Просто удалите $(function () { ... }); вокруг него, и он будет объявлен глобально - доступным из любого места после его объявления.

В качестве дополнительного примечания вы можете удалить $(function () { ... }); из своего внутреннего фрагмента <script>. $(function () { ... }); и $(document).ready(function() { ... }); идентичны, и поэтому нет необходимости в обоих. Последнее просто стенография.

51
задан Mark Amery 8 November 2015 в 12:09
поделиться

4 ответа

Редактирование: Для ответа на редактирование используйте Math.round. Вы могли также моделировать эти Number, объект иметь его выполняет Ваши указания, если Вы предпочитаете тот синтаксис.

Number.prototype.round = function() {
  return Math.round(this);
}
var num = 3.5;
alert(num.round())

я никогда не использовал Number.toFixed() прежде (главным образом, потому что большинство библиотек JS обеспечивает toInt() метод), но оценка по Вашим результатам, я сказал бы, что это будет более последовательно для использования эти Math методы (round, floor, ceil) затем toFixed, если непротиворечивость перекрестного браузера будет тем, что Вы ищете.

34
ответ дан tj111 7 November 2019 в 10:19
поделиться

Я думаю, что FF делает правильную вещь с toFixed, так как шаг 10 ниже говорит, "Если существует два таких n, выберите больший n".

И как [1 170] Grant Wagner сказал: Используйте Math.ceil(x) или Math.floor(x) вместо [1 175] x.toFixed () .

Все ниже от Спецификация языка ECMAScript:

15.7.4.5 Number.prototype.toFixed (fractionDigits)

Возврат строка, содержащая число, представленное в представлении с фиксированной точкой с fractionDigits цифры после десятичной точки. Если fractionDigits не определено, 0 принят. А именно, выполните следующие шаги:

  1. Позволяют f быть ToInteger(fractionDigits). (Если fractionDigits не определено, этот шаг производит значение 0).
  2. , Если f < 0 или f > 20, бросьте RangeError исключение.
  3. Позволяют x быть этим числовым значением.
  4. , Если x NaN, возвратите строку "NaN".
  5. Позволяют s быть пустой строкой.
  6. , Если x ≥ 0, перейдите к s шага 9.
  7. , которому Позволяют, быть "-".
  8. Позволяют x = –x.
  9. , Если x ≥ 10^21, позвольте m = ToString(x) и перейдите к шагу 20.
  10. , которому Позволяют n быть целым числом, для которого точное математическое значение [1 122] максимально близко к нулю. Если существуют два такие n, выберите большее n.
  11. , Если n = 0, позвольте m быть строкой "0". Иначе позвольте m быть строкой, состоящей из цифр десятичного представления [1 129] (в порядке, без продвижения обнуляет).
  12. , Если f = 0, перейдите к шагу 20.
  13. , которому Позволяют k быть количеством символов в [1 132].
  14. , Если k > f, перейдите к шагу 18.
  15. , которому Позволяют z быть строкой, состоящей из [1 135] случаи символа '0'.
  16. Позволяют m быть конкатенацией строк z и m.
  17. Позволяют k = f + 1.
  18. Позволяют a быть первым k–f символы [1 143] и позволить b быть оставлением f символы [1 146].
  19. Позволяют m быть конкатенацией трех строк a, ".", и b.
  20. Возврат конкатенация строк s и m.

length свойство toFixed метод 1.

, Если toFixed метод называют больше чем с одним аргументом, то поведение не определено (см. раздел 15).

реализации разрешают расширить поведение [1 157] для значений [1 158] меньше чем [1 159] или больше, чем [1 160]. В этом случае toFixed не обязательно бросил бы RangeError для таких значений.

ПРИМЕЧАНИЕ вывод [1 163] может быть более точным, чем [1 164] для некоторых значений потому что toString только печать достаточно значащих цифр для различения числа от смежных числовых значений. Например, (1000000000000000128).toString() возвраты "1000000000000000100", в то время как (1000000000000000128).toFixed(0) возвраты "1000000000000000128".

12
ответ дан Community 7 November 2019 в 10:19
поделиться

Вместо toFixed(0) использование Math.ceil() или Math.floor(), в зависимости от того, что требуется.

2
ответ дан Grant Wagner 7 November 2019 в 10:19
поделиться

Определенно кажется, что путь, если Вы получаете непоследовательные ответы.

я могу только предположить, что Ваше намерение с usin toFixed (0) состоит в том, чтобы превратить десятичное число в целое число, в которой точке я рекомендую Math.floor (). Существует немного больше обсуждения лучшего способа сделать так в этот вопрос .

0
ответ дан Community 7 November 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: