سؤال

كيف يمكنني الجولة عددا في جافا سكريبت ؟

math.round() لا يعمل لأنه جولات إلى أقرب رقم عشري.

أنا لست متأكدا مما إذا كان هناك طريقة أفضل للقيام بذلك الأخرى مما يفرقها في النقطة العشرية في حفظ الشيء الأول.يجب أن يكون هناك...

هل كانت مفيدة؟

المحلول

Math.floor()

وهو الجواب.

نصائح أخرى

وجولة نحو اللانهاية السالبة - Math.floor()

+3.5 => +3.0
-3.5 => -4.0

وجولة نحو الصفر - وعادة ما تسمى Truncate()، ولكن غير معتمدة من قبل جافا سكريبت - يمكن محاكاتها باستخدام Math.ceil() للأرقام السالبة وMath.floor() للأرقام موجبة

.
+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()

Math.floor() العمل, لكنه بطيء جدا مقارنة باستخدام المعامل OR العملية:

var rounded = 34.923 | 0;
alert( rounded );
//alerts "34"

تحرير 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 );

ويمكنك محاولة لاستخدام هذه الوظيفة إذا كنت بحاجة إلى تقريبه إلى عدد معين من المنازل العشرية

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)

وكان تافه جولة مع شخص كود إلسس] اليوم وجدت ما يلي الذي يبدو جولات أسفل، وكذلك:

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>

وهنا هو 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top