Подтвердить что ты не робот

Преобразование double в int в Javascript без округления

В С# следующий код возвращает 2:

double d = 2.9;
int i = (int)d;
Debug.WriteLine(i);

В Javascript, однако, единственный способ конвертировать "double" в "int", о котором я знаю, - это использовать Math.round/floor/toFixed и т.д. Есть ли способ преобразования в int в Javascript без округления? Я знаю о последствиях производительности для Number(), поэтому я бы предпочел не преобразовывать его в строку, если это вообще возможно.

4b9b3361

Ответ 1

Используйте parseInt().

var num = 2.9
console.log(parseInt(num, 10)); // 2

Вы также можете использовать |.

var num = 2.9
console.log(num | 0); // 2

Ответ 2

Я нахожу предложения "parseInt" довольно интересными, потому что "parseInt" работает по строкам по дизайну. Вот почему его имя имеет слово "разбор" в нем.

Трюк, который полностью избегает вызова функции, - это

var truncated = ~~number;

Двойное применение "~" унарного оператора оставит вас с усеченной версией значения двойной точности. Тем не менее, значение ограничено 32-битной точностью, как и со всеми другими операциями JavaScript, которые неявно связаны с тем, чтобы числа были целыми (например, индексирование массива и побитовые операторы).

edit — В обновлении довольно долгое время другая альтернатива трюку ~~ - побитовое ИЛИ ИЛИ с нулевым значением:

var truncated = number|0;

Ответ 3

Просто используйте parseInt() и обязательно включите radix, чтобы получить предсказуемые результаты:

parseInt(d, 10);

Ответ 4

В Javascript нет такой вещи, как int. Все Numbers фактически дублируются за кулисами *, поэтому вы не можете полагаться на систему типов, чтобы выдавать вам ордер округления, как вы можете на C или С#.

Вам не нужно беспокоиться о проблемах с точностью (поскольку парни правильно представляют любое целое число до 2 ^ 53), но вы действительно застряли в использовании Math.floor(или других эквивалентных трюков), если вы хотите округлить до ближайшего целое число.


* Большинство JS-движков используют собственные int, когда могут, но все во всех JS-номерах все равно должны иметь двойную семантику.