आप चाहिए आप जो चाहते हैं उसके साथ बहुत सावधान रहें। Floating point numbers वैज्ञानिक उद्देश्यों के लिए उत्कृष्ट हैं और अधिकतर दैनिक उपयोग के लिए काम करते हैं, लेकिन जब आप "दशमलव स्थान से कितने अंक" जैसे कुछ जानना चाहते हैं, तो वे बहुत बुरी तरह से गिर जाते हैं - अगर केवल about 16 digits total है, जिनमें से सभी शामिल नहीं होंगे आपकी गणना के लिए सटीक डेटा। (या, कुछ पुस्तकालय वास्तव में आउटपुट के लिए संख्या स्वरूपित करते समय सटीक डेटा को फेंक सकते हैं, "आधार संख्याएं अधिक अनुकूल हैं"। जो, अक्सर सच है, इसका मतलब है कि यह थोड़ा खतरनाक हो सकता है । स्वरूपित उत्पादन पर निर्भर)
आप BigDecimal
वर्ग के साथ मानक चल बिन्दु संख्या की जगह ले सकता है, तो चल बिन्दु संख्या मनमाना परिशुद्धता प्रदान करने के लिए है, तो आप निरीक्षण कर सकते हैं "कच्चे" संख्या:
> require 'bigdecimal'
=> true
> def digits_after_decimal_point(f)
> sign, digits, base, exponent = f.split
> return digits.length - exponent
> end
> l = %w{1.0, 1.1, 1000000000.1, 1.0000000001}
=> ["1.0,", "1.1,", "1000000000.1,", "1.0000000001"]
> list = l.map { |n| BigDecimal(n) }
=> [#<BigDecimal:7f7a56aa8f70,'0.1E1',9(18)>, #<BigDecimal:7f7a56aa8ef8,'0.11E1',18(18)>, #<BigDecimal:7f7a56aa8ea8,'0.1000000000 1E10',27(27)>, #<BigDecimal:7f7a56aa8e58,'0.1000000000 1E1',27(27)>]
> list.map { |i| digits_after_decimal_point(i) }
=> [0, 1, 1, 10]
के
बेशक, BigDecimal
पर जाने से आपके एप्लिकेशन को बहुत धीमा कर दिया जाता है या जो आपको चाहिए, उसके लिए बहुत शक्तिशाली है, यह आपके वास्तविक कोड के लिए आपके कोड को अत्यधिक जटिल बना सकता है। आपको यह तय करना होगा कि आपके आवेदन के लिए सबसे महत्वपूर्ण क्या है।
काफी सुंदर समाधान! – Linuxios
धन्यवाद, मैं अपने आवेदन सहायक फ़ाइल की तुलना में अटक गया। जरूरत पड़ने पर वहां जाने के लिए अच्छा लगा। – Reno
(1/3) के बारे में क्या? – MrYoshiji