Як я можу округлити номер у JavaScript?
math.round()
не працює, оскільки він округляє його до найближчого десяткового.
Я не впевнений, чи є кращий спосіб зробити це, крім розбиття його в десятковій точці, зберігаючи перший біт. Там має бути...
Як я можу округлити номер у JavaScript?
math.round()
не працює, оскільки він округляє його до найближчого десяткового.
Я не впевнений, чи є кращий спосіб зробити це, крім розбиття його в десятковій точці, зберігаючи перший біт. Там має бути...
Відповіді:
Використання Math.floor()
- це один із способів цього зробити.
Більше інформації: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
Поверніть до негативної нескінченності - Math.floor()
+3.5 => +3.0
-3.5 => -4.0
Круглий бік до нуля - зазвичай називається Truncate()
, але не підтримується JavaScript - можна імітувати за допомогою Math.ceil()
від'ємних чисел та Math.floor()
позитивних чисел.
+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()
x | 0
.
Math.floor()
буде працювати, але це дуже повільно порівняно з використанням бітової OR
операції:
var rounded = 34.923 | 0;
alert( rounded );
//alerts "34"
EDIT Math.floor()
це НЕ повільніше , ніж при використанні | оператор. Дякую Джейсону S, що перевірив мою роботу.
Ось код, який я використовував для тестування:
var a = [];
var time = new Date().getTime();
for( i = 0; i < 100000; i++ ) {
//a.push( Math.random() * 100000 | 0 );
a.push( Math.floor( Math.random() * 100000 ) );
}
var elapsed = new Date().getTime() - time;
alert( "elapsed time: " + elapsed );
|
перетворюється на 32-бітове ціле число, обрізання; Math.floor
кругляє вниз. jsfiddle.net/minitech/UVG2w
Ви можете спробувати скористатися цією функцією, якщо вам потрібно округлити до певної кількості знаків після коми
function roundDown(number, decimals) {
decimals = decimals || 0;
return ( Math.floor( number * Math.pow(10, decimals) ) / Math.pow(10, decimals) );
}
приклади
alert(roundDown(999.999999)); // 999
alert(roundDown(999.999999, 3)); // 999.999
alert(roundDown(999.999999, -1)); // 990
Щоб закріпити вниз до негативної нескінченності, використовуйте:
rounded=Math.floor(number);
Для округлення до нуля (якщо число може округнути до 32-бітного цілого числа між -2147483648 та 2147483647), використовуйте:
rounded=number|0;
Для округлення до нуля (для будь-якого числа) використовуйте:
if(number>0)rounded=Math.floor(number);else rounded=Math.ceil(number);
Округлення в number
бік 0
можна здійснити, віднявши його підписану дробову частину number % 1
:
rounded = number - number % 1;
Як і Math.floor
(в бік -Infinity
), цей метод є абсолютно точним.
Існують відмінності в поводженні з -0
, +Infinity
і -Infinity
хоча:
Math.floor(-0) => -0
-0 - -0 % 1 => +0
Math.floor(Infinity) => Infinity
Infinity - Infinity % 1 => NaN
Math.floor(-Infinity) => -Infinity
-Infinity - -Infinity % 1 => NaN
Math.floor(1+7/8)
Сьогодні обмінювався хтось з кодом elses і виявив таке, що, здається, також закручується вниз:
var dec = 12.3453465,
int = dec >> 0; // returns 12
Для отримання додаткової інформації про глухонімих поширюються зсуву вправо (>>) см MDN Бітові оператори
Мені знадобилося певний час, щоб розібратися, що це робив: D
Але, як зазначено вище, Math.floor () працює і на мій погляд виглядає більш читабельним.
Потрібно поставити -1 на круглу половину вниз, а після цього помножити на -1, як приклад внизу.
<script type="text/javascript">
function roundNumber(number, precision, isDown) {
var factor = Math.pow(10, precision);
var tempNumber = number * factor;
var roundedTempNumber = 0;
if (isDown) {
tempNumber = -tempNumber;
roundedTempNumber = Math.round(tempNumber) * -1;
} else {
roundedTempNumber = Math.round(tempNumber);
}
return roundedTempNumber / factor;
}
</script>
<div class="col-sm-12">
<p>Round number 1.25 down: <script>document.write(roundNumber(1.25, 1, true));</script>
</p>
<p>Round number 1.25 up: <script>document.write(roundNumber(1.25, 1, false));</script></p>
</div>
Ось математика використовується на простому прикладі. Це може допомогти новому розробнику зрозуміти, як його використовувати у функції та що вона робить. Сподіваюся, це допомагає!
<script>
var marks = 0;
function getRandomNumbers(){ // generate a random number between 1 & 10
var number = Math.floor((Math.random() * 10) + 1);
return number;
}
function getNew(){
/*
This function can create a new problem by generating two random numbers. When the page is loading as the first time, this function is executed with the onload event and the onclick event of "new" button.
*/
document.getElementById("ans").focus();
var num1 = getRandomNumbers();
var num2 = getRandomNumbers();
document.getElementById("num1").value = num1;
document.getElementById("num2").value = num2;
document.getElementById("ans").value ="";
document.getElementById("resultBox").style.backgroundColor = "maroon"
document.getElementById("resultBox").innerHTML = "***"
}
function checkAns(){
/*
After entering the answer, the entered answer will be compared with the correct answer.
If the answer is correct, the text of the result box should be "Correct" with a green background and 10 marks should be added to the total marks.
If the answer is incorrect, the text of the result box should be "Incorrect" with a red background and 3 marks should be deducted from the total.
The updated total marks should be always displayed at the total marks box.
*/
var num1 = eval(document.getElementById("num1").value);
var num2 = eval(document.getElementById("num2").value);
var answer = eval(document.getElementById("ans").value);
if(answer==(num1+num2)){
marks = marks + 10;
document.getElementById("resultBox").innerHTML = "Correct";
document.getElementById("resultBox").style.backgroundColor = "green";
document.getElementById("totalMarks").innerHTML= "Total marks : " + marks;
}
else{
marks = marks - 3;
document.getElementById("resultBox").innerHTML = "Wrong";
document.getElementById("resultBox").style.backgroundColor = "red";
document.getElementById("totalMarks").innerHTML = "Total Marks: " + marks ;
}
}
</script>
</head>
<body onLoad="getNew()">
<div class="container">
<h1>Let's add numbers</h1>
<div class="sum">
<input id="num1" type="text" readonly> + <input id="num2" type="text" readonly>
</div>
<h2>Enter the answer below and click 'Check'</h2>
<div class="answer">
<input id="ans" type="text" value="">
</div>
<input id="btnchk" onClick="checkAns()" type="button" value="Check" >
<div id="resultBox">***</div>
<input id="btnnew" onClick="getNew()" type="button" value="New">
<div id="totalMarks">Total marks : 0</div>
</div>
</body>
</html>