Hoe kan ik een getal naar beneden afronden in Javascript?

Hoe kan ik een getal naar beneden afronden in JavaScript?

math.round()werkt niet omdat het wordt afgerond op het dichtstbijzijnde decimaal.

Ik weet niet zeker of er een betere manier is om het te doen, behalve om het op de komma uit elkaar te halen bij het behouden van het eerste bit. Er moet…


Antwoord 1, autoriteit 100%

Het gebruik van Math.floor()is een manier om dit te doen.

Meer informatie: https://developer .mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor


Antwoord 2, autoriteit 14%

Afronden naar negatief oneindig – Math.floor()

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

Afronden naar nul kan worden gedaan met Math.trunc(). Oudere browsers ondersteunen deze functie niet. Als je deze moet ondersteunen, kun je Math.ceil()gebruiken voor negatieve getallen en Math.floor()voor positieve getallen.

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

Antwoord 3, autoriteit 7%

Math.floor()zal werken, maar het is erg traag vergeleken met het gebruik van een bitsgewijze ORbewerking:

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

EDITMath.floor()is nietlangzamer dan het gebruik van de | exploitant. Met dank aan Jason S voor het controleren van mijn werk.

Dit is de code die ik heb gebruikt om te testen:

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 );

Antwoord 4, autoriteit 5%

U kunt deze functie proberen te gebruiken als u naar beneden moet afronden op een bepaald aantal decimalen

function roundDown(number, decimals) {
    decimals = decimals || 0;
    return ( Math.floor( number * Math.pow(10, decimals) ) / Math.pow(10, decimals) );
}

voorbeelden

alert(roundDown(999.999999)); // 999
alert(roundDown(999.999999, 3)); // 999.999
alert(roundDown(999.999999, -1)); // 990

Antwoord 5, autoriteit 2%

Het afronden van een numbernaar 0kan worden gedaan door het ondertekende fractionele deel number % 1af te trekken:

rounded = number - number % 1;

Net als Math.floor(rondt af richting -Infinity) is deze methode perfect nauwkeurig.

Er zijn echter verschillen in de verwerking van -0, +Infinityen -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

Antwoord 6, Autoriteit 2%

Gebruik:

rounded=Math.floor(number);

Om naar nul af te ronden (als het nummer kan rondlopen tot een 32-bits geheel getal tussen -2147483648 en 2147483647), gebruikt u:

rounded=number|0;

Om naar beneden te gaan naar nul (voor elk nummer), gebruikt u:

if(number>0)rounded=Math.floor(number);else rounded=Math.ceil(number);

Antwoord 7

was vandaag een ronde ronde met iemand anders code en vond het volgende dat ook rondblijft:

var dec = 12.3453465,
int = dec >> 0; // returns 12

Voor meer informatie over de sign-propagerende rechterverschuiving (& GT; & GT;) Zie MDN bitwise-exploitanten

Het kostte me een tijdje om uit te werken wat dit aan het doen was: D

Maar zoals hierboven gemarkeerd, werkt Math.Flowing () en ziet er naar mijn mening leesbaar uit.


Antwoord 8

Math.floor(1+7/8)

Antwoord 9

U moet -1-1 tot halve neerzetten en daarna vermenigvuldigen met -1 zoals het voorbeeld omlaag.

<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>

Antwoord 10

Hier wordt math.floor gebruikt in een eenvoudig voorbeeld. Dit kan een nieuwe ontwikkelaar helpen om een idee te krijgen hoe het in een functie moet worden gebruikt en wat het doet. Ik hoop dat het helpt!

<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>

Antwoord 11

Dit was de beste oplossing die ik heb gevonden en die betrouwbaar werkt.

function round(value, decimals) {
    return Number(Math.floor(parseFloat(value + 'e' + decimals)) + 'e-' + decimals);
 }

Met dank aan: Jack L Moore’s blog

Other episodes