दिलचस्प पोस्ट
मैं टेक्स्ट बॉक्स में कैरेट के (एक्स, वाई) पिक्सेल निर्देशांक कैसे प्राप्त करूं? दो अलग-अलग डेटा के साथ दो अलग-अलग जगहों को वापस करने की आवश्यकता है जहां खंड जीसी ओवरहेड सीमा पार हो गई एंड्रॉइड स्टूडियो में एक लाइब्रेरी प्रोजेक्ट और लायब्रेरी प्रोजेक्ट का उपयोग करने वाले एक एप्लिकेशन प्रोजेक्ट को कैसे तैयार किया जाए Android दृश्य छाया php को यूटीसी के लिए समय-समय पर कन्वर्ट अधिसूचना पर क्लिक करने के बाद आवेदन खोलें पायथन प्रगति बार मैटप्ललिब भूखंडों में अक्ष पाठ छुपाना प्रतिबिंब के माध्यम से वैकल्पिक पैरामीटर के साथ तरीकों को शामिल करना आप नेट डेटा कॉन्ट्रैक्ट सीरियलाइजेशन को कैसे नियंत्रित कर सकते हैं, इसलिए यह तत्वों के बजाय XML गुण का उपयोग करता है? एंड्रॉइड: टोस्ट के साथ बैकप्रेस () पर उपयोग करने के लिए उचित तरीका एक टॉगल टेम्पलेट में दिनांकटाइम ऑब्जेक्ट कैसे रेंडर करें जेएएसएबी का इस्तेमाल बिना असर / मार्शल को एक सूची <स्ट्रिंग> स्थिति: निरपेक्ष और अभिभावक की ऊंचाई?

जावास्क्रिप्ट में एक गणितीय अभिव्यक्ति के रूप में स्ट्रिंग का मूल्यांकन करना

मैं एक स्ट्रिंग में गणितीय अभिव्यक्ति का विश्लेषण और मूल्यांकन कैसे कर सकता हूं (उदाहरण के लिए '1+1' ) अपने संख्यात्मक मूल्य को प्राप्त करने के लिए eval(string) को लागू करने के बिना?

उस उदाहरण के साथ, मैं चाहता हूं कि फ़ंक्शन '1+1' और 2 रिटर्न स्वीकार करे।

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट में एक गणितीय अभिव्यक्ति के रूप में स्ट्रिंग का मूल्यांकन करना"

आप जावास्क्रिप्ट एक्सप्रेशन इवेलुएटर लाइब्रेरी का उपयोग कर सकते हैं, जिससे आप सामान की तरह काम कर सकते हैं:

 Parser.evaluate("2 ^ x", { x: 3 }); 

या माथज , जो सामान की तरह अनुमति देता है:

 math.eval('sin(45 deg) ^ 2'); 

मैंने अपनी परियोजनाओं में से एक के लिए मथज का चयन समाप्त कर दिया।

किसी को उस स्ट्रिंग को पार्स करना होगा। यदि यह दुभाषिया ( eval माध्यम से) नहीं है, तो आपको नंबर, ऑपरेटरों, और जो कुछ भी आप गणितीय अभिव्यक्ति में समर्थन करना चाहते हैं, निकालने के लिए एक पार्सिंग रूटीन लिखने की आवश्यकता होगी।

तो, नहीं, कोई भी (सरल) रास्ता eval बिना है यदि आप सुरक्षा के बारे में चिंतित हैं (क्योंकि आप जिस पार्सल को नियंत्रित कर रहे हैं वह उस स्रोत से नहीं है जिसे आप नियंत्रित करते हैं), हो सकता है कि आप इसे eval करने से पहले इनपुट का प्रारूप (श्वेतसूची रिजक्स फ़िल्टर के माध्यम से) देख सकते हैं?

// आप कर सकते हैं + या – आसानी से:

 function addbits(s){ var total= 0, s= s.match(/[+\-]*(\.\d+|\d+(\.\d+)?)/g) || []; while(s.length){ total+= parseFloat(s.shift()); } return total; } var string='1+23+4+5-30'; addbits(string) 

अधिक जटिल गणित eval अधिक आकर्षक बनाता है- और लिखने के लिए निश्चित रूप से सरल।

मैंने हाल ही में रिवर्स पोलिश नोटेशन (यह आसान सा है) में अभिव्यक्ति का मूल्यांकन करके सी # (नो इवल () हमारे लिए … में किया है। कठिन भाग वास्तव में ths स्ट्रिंग को पार्स करता है और इसे रिवर्स पोलिश नोटेशन में बदल देता है। मैंने शंटिंग यार्ड एल्गोरिथ्म का इस्तेमाल किया क्योंकि वहां विकिपीडिया और सीयूडॉकोड पर बहुत अच्छा उदाहरण है। मैंने इसे दोनों को कार्यान्वित करने के लिए वास्तव में सरल पाया और मैं सुझा था कि यदि आपके पास पहले से कोई समाधान नहीं मिला है या विकल्प तलाश रहे हैं

मैं गणितीय अभिव्यक्तियों के मूल्यांकन के लिए जावास्क्रिप्ट पुस्तकालयों की तलाश कर रहा था, और ये दो आशाजनक उम्मीदवारों को मिला:

  • जावास्क्रिप्ट अभिव्यक्ति मूल्यांकनकर्ता : छोटे और उम्मीद है कि अधिक हल्के वजन। बीजीय अभिव्यक्ति, प्रतिस्थापन और कई कार्यों की अनुमति देता है

  • गणज : जटिल संख्याओं, मैट्रिक्स और इकाइयों को भी अनुमति देता है इन-ब्राउज़र जावास्क्रिप्ट और नोड। जेएस दोनों के द्वारा उपयोग किया जा सके।

यह एक छोटी सी फंक्शन है जिसे मैंने इस मुद्दे को हल करने के लिए अभी एक साथ फेंक दिया है – यह एक समय में स्ट्रिंग के एक अक्षर का विश्लेषण करके अभिव्यक्ति बनाता है (हालांकि यह वास्तव में बहुत तेज है)। यह किसी भी गणितीय अभिव्यक्ति ले लेगा (+, -, *, / operators तक ही सीमित) और परिणाम वापस लौटायेगा यह नकारात्मक मूल्यों और असीमित संख्या के संचालन को भी संभाल सकता है।

केवल "करना" बाएं यह सुनिश्चित करने के लिए है कि वह + और / के पहले और + – की गणना करता है बाद में उस कार्यक्षमता को जोड़ देगा, लेकिन अब यह मेरे लिए क्या आवश्यक है …

 /** * Evaluate a mathematical expression (as a string) and return the result * @param {String} expr A mathematical expression * @returns {Decimal} Result of the mathematical expression * @example * // Returns -81.4600 * expr("10.04+9.5-1+-100"); */ function expr (expr) { var chars = expr.split(""); var n = [], op = [], index = 0, oplast = true; n[index] = ""; // Parse the expression for (var c = 0; c < chars.length; c++) { if (isNaN(parseInt(chars[c])) && chars[c] !== "." && !oplast) { op[index] = chars[c]; index++; n[index] = ""; oplast = true; } else { n[index] += chars[c]; oplast = false; } } // Calculate the expression expr = parseFloat(n[0]); for (var o = 0; o < op.length; o++) { var num = parseFloat(n[o + 1]); switch (op[o]) { case "+": expr = expr + num; break; case "-": expr = expr - num; break; case "*": expr = expr * num; break; case "/": expr = expr / num; break; } } return expr; } 

मैंने उसी उद्देश्य के लिए बिगएवल बनाया है
अभिव्यक्तियों को सुलझाने में, यह Eval() समान ही कार्य करता है और%, ^, और, ** (पावर) और जैसे ऑपरेटरों का समर्थन करता है! (भाज्य)। आपको अभिव्यक्ति के अंदर फ़ंक्शन और स्थिरांक (या चर कहें) का उपयोग करने की अनुमति भी है अभिव्यक्ति का हल PEMDAS क्रम में किया जाता है जो जावास्क्रिप्ट सहित प्रोग्रामिंग भाषाओं में आम है।

 var Obj = new BigEval(); var result = Obj.exec("5! + 6.6e3 * (PI + E)"); // 38795.17158152233 var result2 = Obj.exec("sin(45 * deg)**2 + cos(pi / 4)**2"); // 1 var result3 = Obj.exec("0 & -7 ^ -7 - 0%1 + 6%2"); //-7 

यह अंकगणित के लिए उन बड़ी संख्या पुस्तकालयों का उपयोग करने के लिए भी किया जा सकता है, यदि आप आकस्मिक सटीक संख्याओं के साथ काम कर रहे हैं।

मैं अंततः इस समाधान के लिए चला गया हूँ, जो सकारात्मक और नकारात्मक पूर्णांक को संक्षेप में प्रस्तुत करता है (और रेगेक्स के लिए थोड़ा बदलाव से दशमलव के लिए भी काम करेगा):

 function sum(string) { return (string.match(/^(-?\d+)(\+-?\d+)*$/)) ? string.split('+').stringSum() : NaN; } Array.prototype.stringSum = function() { var sum = 0; for(var k=0, kl=this.length;k<kl;k++) { sum += +this[k]; } return sum; } 

मुझे यकीन नहीं है कि यह eval () से तेज़ी से है, लेकिन जैसा कि मुझे ऑपरेशन करना बहुत समय होता है, इस स्क्रिप्ट को जावास्क्रिप्ट कंपाइलर के उदाहरणों को लोड करने से ज्यादा आसान बना देता हूं

निडरमेटर को देखें

 var result = nerdamer('12+2+PI').evaluate(); document.getElementById('text').innerHTML = result.text(); 
 <script src="http://nerdamer.com/js/nerdamer.core.js"></script> <div id="text"></div> 

@kenबेबेक द्वारा उत्कृष्ट उत्तर के लिए एक विकल्प, छोटे नियमित अभिव्यक्ति का उपयोग करके और ऑपरेटरों के बीच रिक्त स्थान की अनुमति देता है

 function addbits(s) { var total = 0; s = s.replace(/\s/g, '').match(/[+\-]?([0-9\.\s]+)/g) || []; while(s.length) total += parseFloat(s.shift()); return total; } 

इसे पसंद करें

 addbits('5 + 30 - 25.1 + 11'); 

अद्यतन करें

यहां एक अधिक अनुकूलित संस्करण है

 function addbits(s) { return (s.replace(/\s/g, '').match(/[+\-]?([0-9\.]+)/g) || []) .reduce(function(sum, value) { return parseFloat(sum) + parseFloat(value); }); } 

ऑटोक्ल्यूलेटर की कोशिश करें https://github.com/javscriptLab/autocalculate इनपुट मानों और आउटपुट की गणना करें चयनकर्ता भावों का उपयोग करके

बस डेटा-एसी = "(# पहलेइनपुट + # सेकंडइनपुट) की तरह अपने आउटपुट इनपुट के लिए एक विशेषता जोड़ें"

किसी भी प्रारंभिक आवश्यकता की आवश्यकता नहीं सिर्फ डेटा-एसी विशेषता को केवल जोड़ें यह स्वचालित रूप से गतिशील रूप से जोड़े गए तत्वों को मिलेगा

आउटपुट के साथ 'रु' को जोड़ने के लिए सिर्फ घुंघराले ब्रैकेट डेटा-एसी = "{रुपये} (# पहलेइनपुट + # सेकंडइनपुट) के अंदर जोड़ें"

मुझे विश्वास है कि इस स्थिति में parseInt और ES6 सहायक हो सकते हैं

==> इस तरह से:

 let func = (str) => { let arr = str.split(""); return `${Number(arr[0]) + parseInt(arr[1] + Number(arr[2]))}`}; console.log(func("1+1")); 

यहाँ मुख्य बात यह है कि parseInt ऑपरेटर के साथ संख्या को पार्स करता है। कोड को संबंधित आवश्यकताओं में संशोधित किया जा सकता है