जावास्क्रिप्ट में एक ऋणात्मक संख्या को धनात्मक में बदलें


308

क्या जावास्क्रिप्ट में एक गणित कार्य है जो संख्याओं को धनात्मक मान में परिवर्तित करता है?

जवाबों:


703

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

Math.abs(x)

Math​.abs()| MDN


1
आप ~ x + 1 पर भी विचार कर सकते हैं। यह बहुत जल्दी है, लेकिन यह क्या कर रहा है के रूप में स्पष्ट नहीं है। इस अंतर को दिखाने के लिए इसे तैयार किया गया: jsperf.com/absolute-int
omgaz

22
@omgaz वे समान नहीं हैं ... var x = -100; ~x+1 === 100लेकिन var x = 100; ~x+1 === -100Math.absहमेशा इसे सकारात्मक बनाता है जबकि लोगों को केवल संकेत का पूरक बना देता है।
jduncanator

तुम भी विचार करना चाहते हो सकता है -x। यह बहुत जल्दी है!
अमारा

93

किस बारे में x *= -1? मुझे इसकी सादगी पसंद है।


17
हालांकि यह सरल है, यह धारणा बनाता है कि संख्या हमेशा नकारात्मक होगी। यदि उपयोग का मामला ऐसा है, तो इसका कमाल है। अन्यथा, मैं सावधानी बरतने की सलाह देता हूं।
18

4
मैं @myusuf से असहमत हूं। जो भी नंबर xफेक होगा। यदि x = 23वह समीकरण में छाया हुआ है, xतो बराबर होगा -23। श्री एस्केलेन्ते के शब्दों में, "एक सकारात्मक समय एक नकारात्मक के बराबर होता है। एक नकारात्मक समय एक नकारात्मक एक सकारात्मक के बराबर होता है।" ... "मैं इन kiiiiiiids तक कैसे पहुँचूँ?"
उत्कृष्ट

2
बिलकुल @Shane कल। अगर x=23, तो यह -23 बन जाएगा। जैसा कि सवाल है, 'जेएस में एक ऋणात्मक संख्या को धनात्मक संख्या में बदलें', लेकिन उपरोक्त किसी भी संख्या को फ्लिप करेगा, यह सकारात्मक या नकारात्मक होगा।
myusuf

2
समझ लिया। आपकी टिप्पणी की मेरी व्याख्या संख्या को फ़्लिप करने और xहमेशा सकारात्मक नहीं बनाने के संदर्भ में थी । मेरी क्षमा याचना @myusuf
बहुत बढ़िया

1
बस याद रखें कि यह समाधान फ्लोट नंबरों के लिए लागू नहीं होता है, यह केवल दशमलव भाग प्राप्त करता है
ऑस्कर लूजा

46

Math.abs(x)या यदि आप निश्चित हैं कि रूपांतरण से पहले मूल्य नकारात्मक है तो बस एक नियमित ऋण चिह्न प्रस्तुत करें x = -x:।


29

ऋण चिह्न (-) सकारात्मक संख्याओं को ऋणात्मक संख्याओं और ऋणात्मक संख्याओं को सकारात्मक संख्याओं में बदल सकता है। x=-yके लिए दृश्य चीनी है x=(y*-1)

var y = -100;
var x =- y;


12
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

मुझे यह समाधान आसानी से समझ में आ रहा है।


8

यदि आप दिलचस्प कोड लिखना चाहते हैं जिसे कोई और कभी भी अपडेट नहीं कर सकता है, तो यह कोशिश करें:

~ --x


1
हालांकि यह फ्लोटिंग पॉइंट्स के साथ काम नहीं करेगा ... और x का मूल्य भी बदलता है।
एलेक्सिस विलके

मुझे लगता है कि यदि आप x को बदल नहीं सकते हैं: ~ --x; ++ x
काइल

1
काइल, ~ऑपरेटर संख्या को 32 बिट पूर्णांक में परिवर्तित करता है। यदि आपके पास इनपुट के रूप में एक फ्लोट है, तो यह ठीक हो जाता है।
एलेक्सिस विल्के

7

मुझे पता है कि यह थोड़ा देर से है, लेकिन इससे जूझ रहे लोगों के लिए, आप निम्नलिखित कार्यों का उपयोग कर सकते हैं:

  • किसी भी संख्या को सकारात्मक मोड़ो

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
    
  • किसी भी संख्या को ऋणात्मक मोड़ें

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
    
  • किसी भी संख्या को उल्टा करें

    let x =  54;
    let y = -54;
    let resultx = -(x);         // -54
    let resulty = -(y);         //  54
    

6

सकारात्मक के लिए नकारात्मक

var X = -10 ;
var number = Math.abs(X);     //result 10

सकारात्मक से नकारात्मक

var X = 10 ;
var number = (X)*(-1);       //result -10

मैं देखता हूं कि आप क्या दिखाना चाहते हैं लेकिन जिस तरह से आप इसे डाल रहे हैं वह भ्रमित करने वाला है। हो सकता है कि आप राज्य करें: सकारात्मक: एब्स का उपयोग करें, नकारात्मक के लिए: एब्स (एक्स) * -1। इस तरह आप पूर्व एक्स साइन क्या है मतलब नहीं है।
डायोनिस

5

नकारात्मक संख्या को सकारात्मक में बदलने के लिए (-1) का गुणा सबसे तेज़ तरीका है। लेकिन आपको सावधान रहना होगा कि मेरी गलती को सकारात्मक संख्या को नकारात्मक में परिवर्तित न करें! इसलिए अतिरिक्त जांच की जरूरत है ...

तब Math.abs, Math.floor और parseInt सबसे धीमा है।

यहां छवि विवरण दर्ज करें

https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1


1
हम में से कुछ भूल जाते हैं कि ऐसे मामलों में बुनियादी गणित कितना उपयोगी हो सकता है। मुझे इस तरह की सादगी की याद दिलाने के लिए धन्यवाद।
अलेक्जेंडर डिक्सन

2

मैंने खुद ऐसा कुछ किया।

num<0?num*=-1:'';

यह जाँचता है कि क्या संख्या ऋणात्मक है और यदि यह है, तो -1 से गुणा करें। यदि आप इसे कैप्चर करते हैं, तो यह आपके लिए एक मान लौटाता है। यदि आप इसे किसी चीज़ को सौंपना चाहते हैं, तो आपको शायद कुछ ऐसा करना चाहिए:

var out = num<0?num*=-1:num; //I think someone already mentioned this variant.

लेकिन यह वास्तव में निर्भर करता है कि आपका लक्ष्य क्या है। मेरे लिए यह सरल था, इसे सकारात्मक बनाएं अगर नकारात्मक, और कुछ नहीं करें। इसलिए कोड में ''। इस मामले में मैंने तृतीयक ऑपरेटर का उपयोग किया है क्योंकि मैं चाहता था, यह बहुत अच्छी तरह से हो सकता है:

if(num<0)num*=-1;

मैंने यहाँ बिटवाइज़ समाधान देखा और उस पर भी टिप्पणी करना चाहता था।

~--num; //Drawback for this is that num original value will be reduced by 1

मेरी राय में यह आत्मीयता बहुत फैंसी है, हम इसे इस तरह से फिर से लिख सकते हैं:

~(num = num-1);

सरल शब्दों में, हम ऋणात्मक संख्या लेते हैं, एक को इससे दूर करते हैं और फिर इसे उल्टा करते हैं। यदि हमने बिटवाइज़ को उल्टा कर दिया होता है तो आम तौर पर हमें 1 मूल्य बहुत छोटा मिलेगा। आप यह भी कर सकते हैं:

~num+1; //Wont change the actual num value, merely returns the new value

वही करेगा लेकिन पहले उल्टा करेगा और फिर सकारात्मक संख्या में 1 जोड़ देगा। हालाँकि आप ऐसा करते हैं:

~num++; //Wont display the right value.

यह पूर्वता के कारण का काम नहीं करेगा , पोस्टफिक्स संचालकों जैसे num++~ से पहले मूल्यांकन किया जाएगा और कारण प्रीफिक्स ++numनहीं होगा भले ही यह बिटक्वाइंड नॉट (~) के समान ही है, यह सही से बाईं ओर मूल्यांकन किया जाता है। मैंने उन्हें चारों ओर स्वैप करने की कोशिश की, लेकिन ऐसा लगता है कि उपसर्ग बिटवाइज़ नहीं की तुलना में थोड़ा बारीक है। +1 काम करेगा क्योंकि '+' में एक उच्च वरीयता है और बाद में मूल्यांकन किया जाएगा।

मैंने उस समाधान को मज़ेदार पाया और उस पर विस्तार करने का निर्णय लिया क्योंकि यह सिर्फ वहाँ फेंका गया था और लोगों को देख कर यह शायद अनदेखा कर रहा था। हालांकि हां, यह तैरने के साथ काम नहीं करेगा।

मेरी आशा है कि यह पोस्ट मूल प्रश्न से दूर नहीं गई है। : /


2

मेरा न्यूनतम दृष्टिकोण

ऋणात्मक संख्या को धनात्मक और इसके विपरीत में परिवर्तित करने के लिए

var num = -24;
num -= num*2;
console.log(num)
// result = 24


0

आप ~ ऑपरेटर का उपयोग कर सकते हैं जो तार्किक रूप से संख्या को ऋणात्मक में परिवर्तित करता है और 1 को ऋणात्मक में जोड़ता है:

var x = 3;
x = (~x + 1);
console.log(x)
// result = -3


0

मैं इसे करने का एक और तरीका जानता हूं। यह तकनीक पॉजिटिव और वाइस वर्सा के लिए नकारात्मक काम करती है

var x = -24;
var result = x * -1;

विपरीतता से:

var x = 58;
var result = x * -1;

लाइव कोड:

// NEGATIVE TO POSITIVE: ******************************************
var x = -24;
var result = x * -1;
console.log(result);

// VICE VERSA: ****************************************************
var x = 58;
var result = x * -1;
console.log(result);

// FLOATING POINTS: ***********************************************
var x = 42.8;
var result = x * -1;
console.log(result);

// FLOATING POINTS VICE VERSA: ************************************
var x = -76.8;
var result = x * -1;
console.log(result);


इस सवाल का जवाब नहीं है। dave एक ऐसे फंक्शन की मांग करता है जो सकारात्मक और सकारात्मक से सकारात्मक में नकारात्मक को बदलता है ।
राफेक्स

उनका सवाल है "क्या जावास्क्रिप्ट में कोई गणित कार्य है जो संख्याओं को धनात्मक मान में परिवर्तित करता है?" वह सकारात्मक से सकारात्मक का उल्लेख नहीं करता है। वह केवल नकारात्मक से सकारात्मक का उल्लेख करता है। आप सकारात्मक को सकारात्मक में क्यों बदलना चाहेंगे। मान समान होगा।
तारिक टमटम

आप प्रश्न के नीचे टिप्पणी में स्पष्टीकरण मांग सकते हैं। वैसे भी, एक स्वीकृत उत्तर है जो सही है। आप इसे फिर से पढ़ सकते हैं और देख सकते हैं कि एक अंतर्निहित फ़ंक्शन है जो ... धनात्मक को धनात्मक में धर्मान्तरित करता है।
राफाएक्स

0

एक कार्यात्मक प्रोग्रामिंग के लिए रामदा में इसके लिए एक अच्छा तरीका है। एक ही विधि सकारात्मक से नकारात्मक और इसके विपरीत जाने पर काम करती है।

https://ramdajs.com/docs/#negate


0

यदि आप चाहते हैं कि संख्या हमेशा सकारात्मक रहे तो कोई फर्क नहीं पड़ता कि आप यह क्या कर सकते हैं।

function toPositive(n){
    if(n < 0){
        n = n * -1;
    }
    return n;
}
var a = toPositive(2);  // 2
var b = toPositive(-2); // 2

आप भी यह कोशिश कर सकते हैं, लेकिन मैंने इसकी सिफारिश नहीं की है:

function makePositive(n){
    return Number((n*-n).toString().replace('-','')); 
}
var a = makePositive(2);  // 2
var b = makePositive(-2); // 2

इसके साथ समस्या यह है कि आप संख्या को नकारात्मक में बदल सकते हैं, फिर स्ट्रिंग में परिवर्तित कर सकते हैं और - को स्ट्रिंग से हटा सकते हैं , फिर वापस इंट में परिवर्तित कर सकते हैं। जो मुझे लगता है कि सिर्फ दूसरे फ़ंक्शन का उपयोग करके अधिक प्रसंस्करण ले जाएगा।

मैंने इसे php में टेस्ट किया है और पहला फंक्शन तेज़ है, लेकिन कभी-कभी JS कुछ क्रेज़ी चीज़ें करता है, इसलिए मैं निश्चित रूप से नहीं कह सकता।


दूसरा उदाहरण इनपुट नंबर की शक्ति को आउटपुट करता है। n*-nहोना चाहिए n*-1। मैं उदाहरण को पूरी तरह से हटा दूंगा, हालांकि, पहले उदाहरण की सादगी की तुलना में प्रकार रूपांतरण और विधि कॉल बहुत अक्षम हैं। यहां तक ​​कि जेएस की विचित्रता संभवतः यहां मदद नहीं कर सकती है
गस्ट वैन डे वाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.