मैं जावास्क्रिप्ट संख्या से दशमलव भाग को कैसे हटा सकता हूं?


218

मेरे पास एक विभाजन के परिणाम हैं और मैं परिणामी संख्या के दशमलव भाग को छोड़ना चाहता हूं।

मैं यह कैसे कर सकता हूँ?

जवाबों:


384

आप उपयोग कर सकते हैं ...

  • Math.trunc() (छोटा अंश आंशिक, नीचे भी देखें)
  • Math.floor() (नीचे घूमो)
  • Math.ceil() (बढ़ाना)
  • Math.round() (निकटतम पूर्णांक तक गोल)

... इस बात पर निर्भर करता है कि आप दशमलव को कैसे निकालना चाहते हैं।

Math.trunc()अभी तक (अर्थात् IE) सभी प्लेटफार्मों पर समर्थित नहीं है, लेकिन आप इस बीच आसानी से एक पॉलीफ़िल का उपयोग कर सकते हैं ।

उत्कृष्ट प्लेटफ़ॉर्म समर्थन के साथ आंशिक भाग को काटकर अलग करने का एक अन्य तरीका बिटवाइज़ ऑपरेटर (.eg |0) का उपयोग करना है। एक नंबर पर एक बिटवाइज़ ऑपरेटर का उपयोग करने का साइड-इफेक्ट यह है कि यह अपने ऑपरेंड को एक हस्ताक्षरित 32 बिट पूर्णांक के रूप में मानेगा, इसलिए आंशिक घटक को हटा देगा। ध्यान रखें कि यह 32 बिट्स से बड़ी संख्याओं को भी मापेगा।


आप फ़्लोटिंग अंक अंकगणित के साथ दशमलव गोलाई की अशुद्धि के बारे में भी बात कर सकते हैं।

आवश्यक पढ़ना - फ्लोटिंग-पॉइंट अंकगणित के बारे में हर कंप्यूटर वैज्ञानिक को क्या जानना चाहिए


29
ध्यान रखें कि संख्या नकारात्मक होने पर संख्यात्मक मान में वृद्धिMath.floor() होगी । इस प्रकार , जबकि । ( जैसा कि @FloydPink द्वारा बताया गया है ) सकारात्मक और नकारात्मक दोनों संख्याओं के लिए उम्मीद के मुताबिक दशमलव भाग को छोड़ देगा । Math.floor(-1.2) -> -2Math.floor(1.2) -> 1parseInt(-1.2) -> -1
पॉल टी। रॉकेन

1
@ PaulT.Rawkeen आप दशमलव भाग को छोड़ने के लिए एक बिटवाइन ऑपरेटर का भी उपयोग कर सकते हैं, लेकिन ध्यान रखें कि यह 32 बिट्स तक भी छोटा हो जाता है।
एलेक्स

2
निम्नलिखित से पता चलता है कि यह उत्तर अस्थिर है:> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
जेक

4
@ जेक 2.3*100जावास्क्रिप्ट का परिणाम है 229.99999999999997, तो ऐसा लगता है कि बिटवाइन ऑपरेटर आपके उदाहरण में अपना काम सही ढंग से कर रहा है।
चाड वॉन नौ

वहाँ एक समान समाधान है |0कि 64 बिट पूर्णांक का उपयोग करता है?
क्लिंट

49

आप दशमलव को कम करने के लिए बिटवाइज़ ऑपरेटरों का भी उपयोग कर सकते हैं।

जैसे

var x = 9 / 2;
console.log(x); // 4.5

x = ~~x;
console.log(x); // 4

x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3

मैथ फ़ंक्शंस की तुलना में बिटवाइज़ ऑपरेशन काफी अधिक कुशल हैं। डबल नॉटवाइज़ ऑपरेटर भी एक नगण्य राशि से बिट x | 0- x << 0बिट संचालन को थोड़ा बेहतर करने लगता है ।

// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) | 0;
}

// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) << 0;
}

// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
    Math.trunc(i * 0.5);
}

// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
    ~~(i * 0.5);
}

यह भी ध्यान देने योग्य है कि बिटवाइज़ नहीं ऑपरेटर अंकगणितीय कार्यों पर पूर्वता लेता है, इसलिए आपको इच्छित परिणाम प्राप्त करने के लिए कोष्ठक के साथ गणनाओं को घेरना पड़ सकता है:

x = -3.7

console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

डबल बिटवाइज़ नहीं ऑपरेटर के बारे में अधिक जानकारी डबल बिटवाइज़ नॉट पर मिल सकती है (~~)


2
थोड़ा कुशल हो सकता है। लेकिन, मैं 'मठ' कार्यों का सुझाव दूंगा, क्योंकि यह अधिक पठनीय है।
ashipj

संभावना है कि यह पूर्णांक 32-बिट हस्ताक्षरित पूर्णांक ( stackoverflow.com/a/7488075/3655192 ) के रूप में प्रतिनिधित्व नहीं करता है तो काम नहीं करता है
Hiroki

30

आप भी कर सकते हैं

parseInt(a/b)

17
ध्यान दें कि parseIntबड़ी संख्या के लिए मज़बूती से काम नहीं करेगा, क्योंकि यह पहली बार अपने तर्क को एक स्ट्रिंग में परिवर्तित करके काम करता है, और बड़ी संख्या के लिए परिणाम घातीय संकेतन का उपयोग करेगा। उदाहरण के लिए: var n = 22222222222222222222222; parseInt(n);लौटेगा 2, क्योंकि n.toString()रिटर्न 2.2222222222222223e+22

2
यह parseInt()अपने उद्देश्य के लिए भी उपयोग नहीं कर रहा है, जो कि एक स्ट्रिंग में एक संख्या लेना है और वापस लौटना है Number
एलेक्स

22

निम्नलिखित कोड का उपयोग करके आप दशमलव बिंदु (यहां 2 अंक) के बाद अंकों की एक निश्चित संख्या भी दिखा सकते हैं:

var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string


4
अवगत रहें कि toFixed () एक स्ट्रिंग देता है, एक संख्या नहीं। developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
जेनिमील कोटे

1
यह कैसे ओपी दशमलव भाग को हटाने के लिए पूछ रहा है के रूप में एक जवाब है
इसहाक

3
हालाँकि यह एक स्ट्रिंग लौटाता है, आप इसे सही करने के लिए नंबर () विधि का उपयोग कर सकते हैं .. नंबर ((15.46974) .toFixed (2))
iPzard



6

ES2015 के साथ, Math.trunc () उपलब्ध है।

Math.trunc(2.3)                       // 2
Math.trunc(-2.3)                      // -2
Math.trunc(22222222222222222222222.3) // 2.2222222222222223e+22
Math.trunc("2.3")                     // 2
Math.trunc("two")                     // NaN
Math.trunc(NaN)                       // NaN

यह IE11 या उससे नीचे समर्थित नहीं है, लेकिन एज और हर दूसरे आधुनिक ब्राउज़र में काम करता है।


2
किसी भी भिन्नता के बारे में जानिए जो X दशमलव स्थानों को कम करने की अनुमति देती है? क्या यह सोचना भोला Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)होगा कि काम करेगा?
जैमीबारो

2
हे जेमी, ऐसा लगता है कि ज्यादातर मामलों के लिए काम करेगा, लेकिन यह फ्लोटिंग पॉइंट गोचैस के लिए अतिसंवेदनशील है। जैसे value = 2.3और x = 2वापस लौटेंगे 2.29। मेरे पास बेहतर सुझाव नहीं है।
चाड वॉन नौ

यह मुझे सही उत्तर की तरह लगता है। ऊपर या नीचे कोई गोलाई नहीं। नकारात्मक संख्या के साथ कोई समस्या नहीं। बस दशमलव को त्यागें। जैसा सवाल पूछा गया।
एनरिक मोरेनो टेंट

2

यदि आप रूडिंग के बारे में परवाह नहीं करते हैं, तो बस संख्या को स्ट्रिंग में परिवर्तित करें, फिर अवधि सहित अवधि के बाद सब कुछ हटा दें। यह काम करता है कि कोई दशमलव है या नहीं।

const sEpoch = ((+new Date()) / 1000).toString();
const formattedEpoch = sEpoch.split('.')[0];

1

फेफिच्ड गोल की तरह व्यवहार करेगा।

एक मंजिल की तरह व्यवहार के लिए% का उपयोग करें:

var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3

2
आपको क्यों लगता है कि यह Math.floor का उपयोग करने से बेहतर है? आपका समाधान अनावश्यक रूप से जटिल और धीमा लगता है। मुझे नहीं पता कि Math.floor कैसे काम करता है, लेकिन मुझे उम्मीद है कि यह बहुत अधिक अनुकूलित होगा। इसके अलावा, मुझे आश्चर्य है कि अगर आपका समाधान फ्लोटिंग पॉइंट राउंडिंग त्रुटियों से पीड़ित हो सकता है।
हंस रोएरिंकहोल्डर 13

1

यहाँ उपरोक्त पदों की मदद से विस्तृत व्याख्या में संक्षिप्त है:

1. Math.trunc (): इसका उपयोग उन अंकों को हटाने के लिए किया जाता है जिनका डॉट द्वारा अनुसरण किया जाता है। यह अंतर्निहित रूप से परिवर्तित होता है। लेकिन, IE में समर्थित नहीं है।

उदाहरण:

मैथ ट्रंक (10.5) // 10

मैथ ट्रंक (-10.5) // -10

अन्य वैकल्पिक तरीका: बिटवाइजर का उपयोग नहीं ऑपरेटर:

उदाहरण:

x = 5.5

~~ x // 5

2. Math.floor (): इसका उपयोग न्यूनतम पूर्णांक मान को सकारात्मक देने के लिए किया जाता है। यह सभी ब्राउज़रों में समर्थित है।

उदाहरण:

मैथ.फ्लोर (10.5) // 10

मैथ.फ्लोर (-10.5) // -11

3. Math.ceil (): इसका उपयोग उच्चतम पूर्णांक मान को संभव बनाने के लिए किया जाता है। यह सभी ब्राउज़रों में समर्थित है।

उदाहरण:

मैथ.सिल (10.5) // 11

मैथ.सिल (-10.5) // -10

4. Math.round (): यह निकटतम पूर्णांक के लिए गोल है। यह सभी ब्राउज़रों में समर्थित है।

उदाहरण:

गणित। घेर (10.5) // 11

गणित। आसपास (-10.5) // -10

गणित। घेर (10.49) // 10

Math.round (-10.51) // -11


1

उदाहरण के लिए:

var x = 9.656;
x.toFixed(0);           // returns 10
x.toFixed(2);           // returns 9.66
x.toFixed(4);           // returns 9.6560
x.toFixed(6);           // returns 9.656000 

या

parseInt("10");         // returns 10
parseInt("10.33");      // returns 10
parseInt("10 20 30");   // returns 10
parseInt("10 years");   // returns 10
parseInt("years 10");   // returns NaN  

मैं यह नहीं देखता कि इस उत्तर में कोई
कुडोस

0

एक ES6 कार्यान्वयन के लिए, निम्न जैसे कुछ का उपयोग करें:

const millisToMinutesAndSeconds = (millis) => {
  const minutes = Math.floor(millis / 60000);
  const seconds = ((millis % 60000) / 1000).toFixed(0);
  return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
}

0

यह उन लोगों के लिए है जो उपयोगकर्ताओं को दशमलव संख्या में प्रवेश करने से रोकना चाहते हैं

<input id="myInput" onkeyup="doSomething()" type="number" />

<script>
    function doSomething() {

        var intNum = $('#myInput').val();

        if (!Number.isInteger(intNum)) {
            intNum = Math.round(intNum);
        }

        console.log(intNum);
    }
</script>

0

आप पूर्ण दशमलव भाग को निकालने के लिए .toFixed (0) का उपयोग कर सकते हैं या उन तर्कों में संख्या प्रदान कर सकते हैं, जिन्हें आप दशमलव को छोटा करना चाहते हैं।

नोट: toFixed संख्या को स्ट्रिंग में बदल देगा।

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