ฉันจะปัดเศษตัวเลขลงใน 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"
แก้ไข Math.floor()
คือไม่ได้ช้ากว่าการใช้ | ผู้ประกอบการ ขอบคุณ Jason 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);
การปัดเศษ a 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)
เล่นรอบกับคนอื่นรหัสวันนี้และพบสิ่งต่อไปนี้ซึ่งดูเหมือนจะลดลงเช่นกัน:
var dec = 12.3453465,
int = dec >> 0; // returns 12
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเลื่อนขวาของการส่งสัญญาณ (>>) ดูตัวดำเนินการ MDN Bitwise
ฉันใช้เวลาสักพักกว่าจะได้ผลว่าทำอะไรอยู่: 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>
นี่คือ math.floor ที่ใช้ในตัวอย่างง่ายๆ สิ่งนี้อาจช่วยให้ผู้พัฒนารายใหม่เข้าใจถึงวิธีการใช้งานในฟังก์ชั่นและสิ่งที่ทำ หวังว่ามันจะช่วย!
<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>