У мене є результати ділення, і я хочу відкинути десяткову частину отриманого числа.
Як я можу це зробити?
У мене є результати ділення, і я хочу відкинути десяткову частину отриманого числа.
Як я можу це зробити?
Відповіді:
Ви можете використовувати ...
Math.trunc() (усічена дробова частина, також див. нижче)Math.floor() (округлюємо вниз)Math.ceil() (округлити) Math.round() (округніть до найближчого цілого числа)... залежно від того, як ви хотіли видалити десятковий.
Math.trunc()Ще не підтримується на всіх платформах (а саме в IE), але ви можете тим часом легко використовувати поліфайл .
Інший метод обрізання дробової частини з відмінною підтримкою платформи - це використання побітового оператора (.eg |0). Побічним ефектом використання побітового оператора на число є те, що він буде трактувати його операнд як підписане 32-бітове ціле число, тому видаляючи дробову складову. Майте на увазі, що це також буде маніпулювати числами більше 32 біт.
Ви також можете говорити про неточність десяткового округлення з арифметикою з плаваючою комою.
Обов’язкове читання - що повинен знати кожен комп'ютерний арифметик з арифметикою з плаваючою комою .
> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100в javascript є 229.99999999999997, тому, здається, побітний оператор правильно виконує свою роботу у вашому прикладі.
|0що використовує 64-бітні цілі числа?
Ви також можете використовувати побітові оператори для відсікання десяткової.
напр
var x = 9 / 2;
console.log(x); // 4.5
x = ~~x;
console.log(x); // 4
x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3
Бітові операції значно ефективніші, ніж функції Math. Оператор подвійного не побітного розряду також, здається, трохи перевищує операції x | 0та x << 0бітові операції на незначну кількість.
// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) | 0;
}
// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) << 0;
}
// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
Math.trunc(i * 0.5);
}
// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
~~(i * 0.5);
}
Також варто відзначити, що бітовий оператор не має переваги над арифметичними операціями, тому, можливо, вам знадобиться оточити обчислення дужками, щоб мати бажаний результат:
x = -3.7
console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
Більш детальну інформацію про оператора подвійного розрядного перегляду не можна знайти в Double bitwise NOT (~~)
Ви також можете зробити
parseInt(a/b)
parseIntдля великих чисел не буде надійно працювати, оскільки він працює, попередньо перетворивши свій аргумент у рядок, а для великих чисел в результаті буде використана експоненціальна позначення. Наприклад: var n = 22222222222222222222222; parseInt(n);повернеться 2, тому що n.toString()повертається 2.2222222222222223e+22.
parseInt()для своєї мети, а це взяти число в рядку і повернути a Number.
Ви також можете показати певну кількість цифр після десяткових знаків (тут 2 цифри), використовуючи наступний код:
var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string
Використовуйте Math.round()функцію.
Math.round(65.98) // will return 66
Math.round(65.28) // will return 65
$.round = Math.round;)
Використовуйте Math.round() .
(Відповідь Алекса краще; я зробив припущення :)
З ES2015 доступний Math.trunc () .
Math.trunc(2.3) // 2
Math.trunc(-2.3) // -2
Math.trunc(22222222222222222222222.3) // 2.2222222222222223e+22
Math.trunc("2.3") // 2
Math.trunc("two") // NaN
Math.trunc(NaN) // NaN
Він не підтримується в IE11 або нижче, але працює в Edge та будь-якому іншому сучасному браузері.
Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)це спрацює?
value = 2.3і x = 2повернеться 2.29. Я не маю кращої пропозиції.
toFixed буде вести себе як кругле.
Для такої підлоги, як поведінка, використовуйте%:
var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3
Ось стислий в детальному поясненні за допомогою вищезазначених постів:
1. Math.trunc (): використовується для видалення цифр, за якими слідує крапка. Це перетворюється неявно. Але, не підтримується в IE.
Приклад:
Math.trunc (10.5) // 10
Math.trunc (-10,5) // -10
Інший альтернативний спосіб: Використання побітових операторів:
Приклад:
х = 5,5
~~ x // 5
2. Math.floor (): використовується для надання мінімального цілого значення, яке можливо. Він підтримується у всіх браузерах.
Приклад:
Математичний поверх (10.5) // 10
Math.floor (-10,5) // -11
3. Math.ceil (): використовується для отримання максимально можливого цілого значення. Він підтримується у всіх браузерах.
Приклад:
Math.ceil (10,5) // 11
Math.ceil (-10,5) // -10
4. Math.round (): округлюється до найближчого цілого числа. Він підтримується у всіх браузерах.
Приклад:
Math.round (10.5) // 11
Math.round (-10,5) // -10
Math.round (10.49) // 10
Math.round (-10,51) // -11
Наприклад:
var x = 9.656;
x.toFixed(0); // returns 10
x.toFixed(2); // returns 9.66
x.toFixed(4); // returns 9.6560
x.toFixed(6); // returns 9.656000
або
parseInt("10"); // returns 10
parseInt("10.33"); // returns 10
parseInt("10 20 30"); // returns 10
parseInt("10 years"); // returns 10
parseInt("years 10"); // returns NaN
Це для тих, хто хоче перешкодити користувачам вводити десяткові числа
<input id="myInput" onkeyup="doSomething()" type="number" />
<script>
function doSomething() {
var intNum = $('#myInput').val();
if (!Number.isInteger(intNum)) {
intNum = Math.round(intNum);
}
console.log(intNum);
}
</script>
Ви можете використовувати .toFixed (0), щоб видалити повну десяткову частину або вказати число в аргументах, до яких ви хочете відрізати десятковий.
Примітка: toFixed перетворить число в рядок.
Math.floor()буде збільшувати числове значення , коли число негативне . Таким чином , вMath.floor(-1.2) -> -2той часMath.floor(1.2) -> 1.parseInt(-1.2) -> -1( як зазначає @FloydPink ) відкине десяткову частину, як очікувалося, і для позитивних, і для від’ємних чисел.