/ / मैं रूबी में एक डबल के सभी अंक कैसे प्राप्त करूं? [बंद] - माणिक, फ्लोटिंग-पॉइंट, डबल

रूबी में मुझे दो अंकों के सभी अंक कैसे प्राप्त होंगे? [बंद] - रूबी, फ्लोटिंग-पॉइंट, डबल

मैं रूबी का उपयोग करके बहुत लंबी संख्या में हेरफेर करना चाहता हूं। लेकिन जब मैं स्क्रीन में नंबर प्रिंट करता हूं तो मुझे मूल संख्या में से कुछ ही अंक मिलते हैं। तो मैं अपने इच्छित सभी अंक कैसे प्राप्त करूं?

मेरा कोड यहाँ है

x = Array.new
y = Float(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end

puts y
#=> 14.2857142857143

उत्तर:

जवाब के लिए 2 № 1

आपको मिलने वाला परिणाम सिर्फ एक है एक फ्लोट संख्या का दृश्य प्रतिनिधित्व। हालाँकि, आंतरिक रूप से, कंप्यूटर एक प्रारूप (बाइनरी फ्लोटिंग-पॉइंट) का उपयोग करता है जो कि 0.1, 0.2 या 0.3 जैसी संख्या का सही प्रतिनिधित्व नहीं कर सकता है।

कोई फर्क नहीं पड़ता कि कौन सा कोड हम आपको प्रदान कर सकते हैं, लेकिन यदि एसंख्या में अनंत प्रतिनिधित्व है, इसे दशमलव प्रतिनिधित्व में प्रारूपित करने या प्रदर्शित करने का हर प्रयास अंततः एक रूटिंग के साथ समाप्त होगा। यह 10 अंक, 1000 अंक या यहां तक ​​कि 100000000 अंक हो सकता है, लेकिन यह हमेशा एक रूडिंग है।

दशमलव से निपटना कठिन है। आप जो हासिल करने की कोशिश कर रहे हैं, उसके आधार पर आप यह करना चाहते हैं:

  • उपयोग करने पर विचार करें BigDecimal (BigDecimal बहुत बड़े या बहुत सटीक फ्लोटिंग पॉइंट नंबरों के लिए समान समर्थन प्रदान करता है) या
  • मनी हेरफेर के मामले में। आप पूर्णांक के रूप में मूल्यों का प्रतिनिधित्व कर सकते हैं और पूर्णांकों में हेरफेर कर सकते हैं। पूर्णांक उद्देश्य के लिए पूर्णांक को पूर्णांक से विभाजित करें

यहां उपयोग करने का एक उदाहरण है BigDecimal

require "bigdecimal"

x = []
y = BigDecimal(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end

puts y
# => 0.14E2

puts y.to_i
# => 14

puts y.to_f
# => 14.0

जवाब के लिए 0 № 2

यहाँ है कि मैं कैसे मानक पुस्तकालय की आवश्यकता होगी mathn :

require "mathn"

x = Array.new
y = Float(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end
y  # => 14.285714285714285
y.round(7) # => 14.2857143
y.round(9) # => 14.285714286
y.round(13) # => 14.2857142857143