मैं जावास्क्रिप्ट में किसी संख्या को कैसे घटा सकता हूं?


228

मैं जावास्क्रिप्ट में किसी संख्या को कैसे घटा सकता हूं?

math.round() काम नहीं करता है क्योंकि यह निकटतम दशमलव के लिए इसे गोल करता है।

मुझे यकीन नहीं है कि पहली बार रखने पर दशमलव बिंदु पर इसे तोड़ने के अलावा इसे करने का एक बेहतर तरीका है। वहाँ होना चाहिए...


21
शून्य की ओर गोल या नकारात्मक अनंत की ओर?
डैनियल ब्रुकनर

जवाबों:


422

का उपयोग करते हुए Math.floor() एक तरीका है।

अधिक जानकारी: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor


2
यह सबसे धीमी विधि भी है; अगर आपको इनमें से बहुत कुछ करने की आवश्यकता है, तो बिटवाइज़ का उपयोग करें | ऑपरेटर (मेरी पोस्ट देखें)।
गेराल्डेविस

12
| ऑपरेटर भी शून्य की ओर बढ़ता है, न कि नकारात्मक अनंतता का।
माइक गॉडिन

60

नकारात्मक अनंत की ओर गोल - 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()

पूर्णता के लिए धन्यवाद, लेकिन पूंजीकरण गलत है ... और जावा-स्क्रिप्ट में जो एक बड़ा अंतर बनाता है। वरना मैं यहाँ उखड़ जाता।
जॉर्ज

मैंने उत्तर को अपडेट कर दिया है ताकि पूंजीकरण अब सही हो।
chasen

18
@ जॉर्ज विशाल या विशाल? : D
m93a

1
आप गोल-से-शून्य के माध्यम से एक ही प्रभाव प्राप्त कर सकते हैं x | 0
अहमद फसीह

28

Math.floor()काम करेगा, लेकिन बिटवाइज़ ORऑपरेशन का उपयोग करने की तुलना में यह बहुत धीमा है :

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

EDIT Math.floor() का उपयोग करने की तुलना में धीमी नहीं है | ऑपरेटर। मेरे काम की जाँच के लिए जेसन एस का धन्यवाद।

यहाँ वह कोड है जिसका मैं परीक्षण करता था:

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

11
??? मैं सिर्फ jsdb (www.jsdb.org) चला रहा हूं, जो Spidermonkey 1.7 का उपयोग करता है, और 100000 फ्लोटिंग पॉइंट नंबरों की एक सरणी पर x [i] का योग करने के लिए एक लूप चलाता है, पहले Math.foror () के साथ। फिर बिटवाइज़ के साथ या जैसा कि आप सुझाव देते हैं। इसने लगभग उसी समय लिया, 125 मिसे।
जेसन एस

4
बस 500000 फ्लोटिंग पॉइंट नंबरों के साथ परीक्षण दोहराया, यह लगभग उसी समय लिया, लगभग 625 मिसे।
जेसन एस

5
इसलिए मैं नहीं देखता कि 1.25 क्यूसेक बहुत धीमा है।
जेसन एस

3
आपके डेटा के साथ बहस नहीं कर सकते :) मुझे लगता है कि मुझे एक्शनस्क्रिप्ट (एक्मास्क्रिप्ट पर निर्मित) के साथ जेएस के कार्यान्वयन को भ्रमित किया जा सकता है; स्पष्ट रूप से कार्यान्वयन अलग है। मेरे काम की जाँच के लिए धन्यवाद!
गेराल्डेविस

14
वे एक ही काम नहीं करते हैं, या तो। |एक 32-बिट पूर्णांक में परिवर्तित हो जाता है, छोटा हो जाता है; Math.floorनीचे चक्कर लगाना। jsfiddle.net/minitech/UVG2w
Ry-

21

आप इस फ़ंक्शन का उपयोग करने की कोशिश कर सकते हैं यदि आपको दशमलव स्थानों की एक विशिष्ट संख्या के लिए चक्कर लगाना पड़े

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

मुझे लगता है कि इस तरह के एक-लाइनर को एक फ़ंक्शन की आवश्यकता नहीं होती है।
ह्यूबर्ट ग्रेज्सकोविआक

4
राउंडडाउन (4.56, 2) आपको 4.55 देता है, इसलिए मुझे नहीं लगता कि यह एक अच्छा समाधान है।
crys

6

नकारात्मक अनंत की ओर चक्कर लगाने के लिए, उपयोग करें:

rounded=Math.floor(number);

शून्य की ओर चक्कर लगाने के लिए (यदि संख्या -2147483648 और 2147483647 के बीच 32-बिट पूर्णांक पर गोल हो सकती है), उपयोग करें:

rounded=number|0;

शून्य की ओर गोल करने के लिए (किसी भी संख्या के लिए), उपयोग करें:

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

5

एक गोलाई 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

3
Math.floor(1+7/8)

1 + 7/8 = 1 - Math.floor () के लिए ज्यादा जरूरत नहीं है :)
जेसन बेरी

18
वास्तव में यह (7/8) +1 जो नहीं है 1. आप 3 ग्रेड बीजगणित धन्यवाद
जो फिलिप्स

1
उम्म, कृपया इसे जावास्क्रिप्ट प्रोग्राम में वास्तव में आज़माएँ। मैंने किया। प्रदर्शन (1 + 7/8) और आपको 1.875 दिखाई देगा। Math.round (...) 2 है, Math.floor (...) 1. आप लोग किस बारे में बात कर रहे हैं?
डिजिटलरॉस

1
या फ़ायरफ़ॉक्स त्रुटि कंसोल खोलें। या फायरबग। यह कोशिश करना मुश्किल नहीं है। मैं इसे करने की कोशिश की। 1 + 7/8 js में 1.875 है। क्या आप संभवतः भूल गए कि js में सभी गणित फ्लोटिंग पॉइंट में है?
DigitalRoss

3
यह भूलना आसान है कि जावास्क्रिप्ट फ्लोटिंग पॉइंट में सब कुछ करता है। कई अन्य भाषाओं में 1 + 7/8 1 है, लेकिन js में यह वास्तव में 1.875 है।
डिजिटलरॉस

3

आज किसी को कोड के साथ चक्कर लगाना था और निम्नलिखित पाया जो नीचे के रूप में भी लगता है:

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

साइन-प्रोपगेटिंग राइट शिफ्ट (>>) के बारे में अधिक जानकारी के लिए एमडीएन बिटवाइज ऑपरेटर्स देखें

मुझे यह काम करने में थोड़ा समय लगा कि यह क्या कर रहा था: डी

लेकिन जैसा कि ऊपर बताया गया है, Math.floor () काम करता है और मेरी राय में अधिक पठनीय लगता है।


3
अगर यह 32 बिट्स में फिट नहीं होता है तो यह चुपचाप आपके नंबर को मार देता है। क्रोमियम कंसोल: 99999999999999999999999 | 0 => -167772160
Matthias Urlichs

0

आपको -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>

ईमानदारी से इस समुदाय में, हम ऊपर दिए गए @phoebus जैसे उत्तर पसंद करते हैं।
अंकित पांडे

0

यहाँ 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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.