2013-06-27 6 views
11

ऐसा प्रतीत होता है जैसे AngularJS का angular.isNumber काम नहीं कर रहा है। यह तारों के साथ काम नहीं करता है जो संख्याएं हैं। क्या मुझसे कुछ गलत हो रही है? क्या मुझे बस isNaN() का उपयोग करना चाहिए?angular.isNumber() अपेक्षित के रूप में क्यों काम नहीं कर रहा है?

angular.isNumber('95.55') == false 
angular.isNumber('95.55' * 1) == true 
angular.isNumber('bla' * 1) == true 
angular.isNumber(NaN) == true 

मैं कुछ की जरूरत है एक स्ट्रिंग एक नंबर है (जब यह वास्तव में है) और angular.isNumber() मुझे है कि जब तक मैं 1 से गुणा करते हैं नहीं होगा देखने के लिए, लेकिन अगर मैं ऐसा तो यह हमेशा सच हो जाएगा । NaN एक संख्या नहीं है (परिभाषा के अनुसार) और इसलिए झूठी वापसी करनी चाहिए।

+1

http://stackoverflow.com/questions/2801601/why-does-typeof-nan-return-number – RonSper

+6

क्या काम नहीं करता है? '95 .55 'एक संख्या नहीं है, यह एक स्ट्रिंग है। इसी प्रकार, किसी संख्या से स्ट्रिंग को गुणा करने से, जावास्क्रिप्ट उस स्ट्रिंग को एक संख्या के रूप में पार्स/कास्ट करेगा और ऑपरेशन करने का प्रयास करेगा। Concatenation अलग-अलग काम करता है, क्योंकि संख्या + स्ट्रिंग एक स्ट्रिंग होगी (जावास्क्रिप्ट संख्या को स्ट्रिंग के रूप में रखता है)। –

+0

@BradM मैंने समस्या को स्पष्ट करने में मदद के लिए मेरे प्रश्न में जोड़ा। –

उत्तर

14

जावास्क्रिप्ट, typeof NaN === 'number' में।

आप एक संख्या के रूप में एक स्ट्रिंग पहचान करने के लिए की जरूरत है,, संख्या करने के लिए इसे डाली स्ट्रिंग वापस करने के लिए परिवर्तित और इनपुट के खिलाफ इस तुलना उदाहरण के लिए,।

function stringIsNumber(s) { 
    var x = +s; // made cast obvious for demonstration 
    return x.toString() === s; 
} 

stringIsNumber('95.55'); // true 
stringIsNumber('foo'); // false 
// still have 
stringIsNumber('NaN'); // true 
+2

बस यह इंगित करना चाहते हैं कि यदि आप बहुत छोटी या बेहद बड़ी (स्ट्रिंग) संख्याओं से निपट रहे हैं तो यह गोल त्रुटियों से ग्रस्त हो सकता है। –

+1

मैं इस लिंक को कोणीय जिथब पेज पर किसी मुद्दे पर जोड़ दूंगा, जहां उन्होंने इसे ठीक किया है जैसा कि वे ठीक नहीं करेंगे: https://github.com/angular/angular.js/issues/701 – Capaj

+1

चेतावनी: यह विधि झूठी वापसी के लिए "0.0000005" जैसे वैध संख्याएं (0.0000005) .toString() == "5e-7" जावास्क्रिप्ट में। – joelnet

0

मैं एक ही समस्या पर काम कर रहा था और मैं उस किनारे के मामले के आसपास काम करने की कोशिश कर रहा था। तो मैंने थोड़ा अलग दृष्टिकोण बनाया।

FIDDLE

function isStringNumber(str) { 
    var parsed = parseFloat(str); 
    var casted = +str; 
    return parsed === casted && !isNaN(parsed) && !isNaN(casted); 
} 
संबंधित मुद्दे