Как преобразовать число с плавающей запятой в целое число в JavaScript?
Я хотел бы преобразовать число с плавающей запятой в целое число в JavaScript. На самом деле, мне нужно узнать, как выполнить ОБЕ стандартные конверсии: округление и усечение (обрезка). И при этом мне нужно делать это эффективно, не прибегая к преобразованию в строку и парсингу.
5 ответ(ов)
Обратите внимание: нельзя использовать Math.floor()
в качестве замены для обеспечения усечения, потому что Math.floor(-3.1) = -4
, а не -3
!!
Корректная замена для усечения будет следующей:
function truncate(value) {
if (value < 0) {
return Math.ceil(value);
}
return Math.floor(value);
}
Таким образом, если вам нужно правильно усечь число, учитывая, что отрицательные числа должны округляться в большую сторону, а положительные — в меньшую, приведённая функция обеспечит ожидаемый результат.
Для округления вниз (truncate) вы можете использовать следующий код:
var intvalue = Math.floor(value);
А для округления до ближайшего целого числа (round) используйте:
var intvalue = Math.round(value);
Таким образом, Math.floor(value)
всегда будет возвращать большее целое число, которое меньше или равно значению, а Math.round(value)
округляет значение до ближайшего целого, применяя правило математического округления.
На вопрос о побитовом сдвиге на 0, который эквивалентен делению на 1, можно ответить следующим образом:
Когда вы выполняете побитовый сдвиг (как >>
или >>>
) числом 0, фактически не происходит сдвига битов. Это эквивалентно тому, чтобы просто вернуть исходное число, поскольку сдвиг на 0 не изменяет битовое представление числа.
Пример:
2.0 >> 0; // 2
2.0 >>> 0; // 2
В обоих случаях число 2.0
остается без изменений, так как сдвиг на 0 не влияет на его значение. Это можно рассматривать как деление на 1, т.е. результат останется тем же числом, так как деление на 1 не меняет значение.
Также стоит отметить, что побитовый сдвиг применяется к целым числам. JavaScript неявно приводит десятичные числа к целым, когда вы применяете операцию сдвига. Таким образом, вы получите результат, аналогичный тому, что вы получили бы в результате деления на 1.
Если вам нужно округлить число вниз, вы можете использовать функцию Math.floor()
. Вот пример:
var floatvalue = 4.56; // ваше дробное число
var intvalue = Math.floor(floatvalue); // округление вниз
В результате intvalue
будет равно 4.
Если же вам нужно округлить число вверх, используйте Math.ceil()
:
var floatvalue = 4.56; // ваше дробное число
var intvalue = Math.ceil(floatvalue); // округление вверх
В этом случае intvalue
будет равно 5.
Еще один возможный способ — использовать операцию XOR:
console.log(12.3 ^ 0); // 12
console.log("12.3" ^ 0); // 12
console.log(1.2 + 1.3 ^ 0); // 2
console.log(1.2 + 1.3 * 2 ^ 0); // 3
console.log(-1.2 ^ 0); // -1
console.log(-1.2 + 1 ^ 0); // 0
console.log(-1.2 - 1.3 ^ 0); // -2
Приоритет битовых операций ниже, чем приоритет математических операций, что может быть полезно. Попробуйте это на jsfiddle.net.
Сравнение: var functionName = function() {} против function functionName() {}
Как преобразовать Set в Array?
В чем разница между String.slice и String.substring?
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"