15

Как преобразовать число с плавающей запятой в целое число в JavaScript?

16

Я хотел бы преобразовать число с плавающей запятой в целое число в JavaScript. На самом деле, мне нужно узнать, как выполнить ОБЕ стандартные конверсии: округление и усечение (обрезка). И при этом мне нужно делать это эффективно, не прибегая к преобразованию в строку и парсингу.

5 ответ(ов)

1

Обратите внимание: нельзя использовать Math.floor() в качестве замены для обеспечения усечения, потому что Math.floor(-3.1) = -4, а не -3!!

Корректная замена для усечения будет следующей:

function truncate(value) {
    if (value < 0) {
        return Math.ceil(value);
    }
    return Math.floor(value);
}

Таким образом, если вам нужно правильно усечь число, учитывая, что отрицательные числа должны округляться в большую сторону, а положительные — в меньшую, приведённая функция обеспечит ожидаемый результат.

0

Для округления вниз (truncate) вы можете использовать следующий код:

var intvalue = Math.floor(value);

А для округления до ближайшего целого числа (round) используйте:

var intvalue = Math.round(value);

Таким образом, Math.floor(value) всегда будет возвращать большее целое число, которое меньше или равно значению, а Math.round(value) округляет значение до ближайшего целого, применяя правило математического округления.

0

На вопрос о побитовом сдвиге на 0, который эквивалентен делению на 1, можно ответить следующим образом:

Когда вы выполняете побитовый сдвиг (как >> или >>>) числом 0, фактически не происходит сдвига битов. Это эквивалентно тому, чтобы просто вернуть исходное число, поскольку сдвиг на 0 не изменяет битовое представление числа.

Пример:

2.0 >> 0; // 2
2.0 >>> 0; // 2

В обоих случаях число 2.0 остается без изменений, так как сдвиг на 0 не влияет на его значение. Это можно рассматривать как деление на 1, т.е. результат останется тем же числом, так как деление на 1 не меняет значение.

Также стоит отметить, что побитовый сдвиг применяется к целым числам. JavaScript неявно приводит десятичные числа к целым, когда вы применяете операцию сдвига. Таким образом, вы получите результат, аналогичный тому, что вы получили бы в результате деления на 1.

0

Если вам нужно округлить число вниз, вы можете использовать функцию 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.

0

Еще один возможный способ — использовать операцию 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.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь