ऐसा लगता है कि मैं यहाँ कुछ स्पष्ट याद कर रहा हूँ। यह कई बार पूछा गया है - और इसका उत्तर आमतौर पर इस प्रकार है:

var num = 4.5;
num % 1 === 0; // false - 4.5 is a decimal

लेकिन, यह विफल रहता है

var num = 1.0; // or 2.0, 3.0, ...
num % 1 // 0

दुर्भाग्य से, ये भी काम नहीं करते हैं

num.toString() // 1
typeof num // "number"

मैं एक जावास्क्रिप्ट कलर पार्सिंग लाइब्रेरी लिख रहा हूं, और मैं इनपुट को अलग तरह से प्रोसेस करना चाहता हूं अगर इसे 1.0 या 1 के रूप में दिया गया है। मेरे मामले में, 1.0 का वास्तव में मतलब 100% है और 1 का मतलब 1 है।

अन्यथा, दोनों rgb 1 1 1 और rgb 1 255 255 को rgb 255 255 255 के रूप में पार्स किया जाएगा (चूंकि मैं अभी कुछ भी <= 1 को एक अनुपात के रूप में ले रहा हूं)।

4
Brian Grinstead 14 सितंबर 2011, 23:43

5 जवाब

सबसे बढ़िया उत्तर

वे संख्याएँ वास्तव में दशमलव या पूर्णांक नहीं हैं। वे सब तैर रहे हैं। 1 और 1.0 के बीच एकमात्र वास्तविक अंतर वह अंकन है जिसका उपयोग समान मूल्यों के फ़्लोट बनाने के लिए किया गया था।


1 === 1.0; // true
parseInt('1') == parseInt('1.0'); // true
parseFloat('1') === parseFloat('1.0'); // true
parseInt('1') === parseFloat('1'); // true
// etc...

साथ ही, यह प्रदर्शित करने के लिए कि वे वास्तव में एक ही अंतर्निहित डेटा प्रकार हैं:

typeof(1); // 'number'
typeof(1.0); // 'number'

साथ ही, ध्यान दें कि जावास्क्रिप्ट में 'नंबर' अन्य भाषाओं की तरह स्पष्ट नहीं है, क्योंकि संख्याएं हमेशा तैरती रहती हैं।


4
jmar777 15 सितंबर 2011, 00:13

अपनी स्क्रिप्ट को इनपुट को स्ट्रिंग के रूप में पार्स करने दें, फिर यह जाँच का विषय होगा कि क्या इस तरह का बिंदु है।

mystring.indexOf('.');

यह उदाहरण और यह उदाहरण

3
Jose Faeti 15 सितंबर 2011, 18:32

स्ट्रिंग को पार्स करते समय आपको इसे करना होगा। यदि स्ट्रिंग में दशमलव बिंदु है, तो इसे प्रतिशत के रूप में मानें, अन्यथा यह केवल पूर्णांक मान है।

तो, उदा.:

rgb 1 1 1   // same as #010101
rgb 1.0 1 1 // same as #ff0101

चूंकि rgb वहां है, आप वैसे भी स्ट्रिंग को पार्स कर रहे हैं। जैसे ही आप इसे कर रहे हों, बस वहां . खोजें।

1
Jonathan M 14 सितंबर 2011, 23:48

खैर, जहां तक ​​कंपाइलर का सवाल है, 1.0 और 1 के बीच कोई अंतर नहीं है, और क्योंकि कोई अंतर नहीं है, उनके बीच का अंतर बताना असंभव है। आपको प्रतिशत चीज़ के लिए इसे 1.0 से 100 में बदलना चाहिए। वही इसे ठीक कर सकता है।

0
Monkeyanator 14 सितंबर 2011, 23:48
var num = 1;

तथा

var num = 1.0;

समान हैं। आप उल्लेख करते हैं कि उपयोगकर्ता से दिए जाने पर आप उनके साथ अलग व्यवहार करना चाहते हैं। आप अंतर को तब पार्स करना चाहेंगे जब यह अभी भी एक स्ट्रिंग है और इसे उचित संख्या में परिवर्तित करें।

0
Daniel Moses 14 सितंबर 2011, 23:49