फ़्लोटिंग-पॉइंट संख्याएं निश्चित रूप से उनकी सीमा के भीतर सभी दशमलव संख्याओं का प्रतिनिधित्व नहीं कर सकती हैं। उदाहरण के लिए, 0.9 बिल्कुल 0.9 नहीं है, यह वास्तव में 0.9 के करीब एक संख्या है जो अधिकांश मामलों में हवाओं को मुद्रित किया जा रहा है। जैसे-जैसे आप फ़्लोटिंग-पॉइंट की गणना करते हैं, ये त्रुटियां जमा हो सकती हैं और आप सही संख्या के बहुत करीब के साथ हवादार हो जाते हैं लेकिन इसके बराबर नहीं होते हैं। उदाहरण के लिए, 0.3 * 3 == 0.9
false
लौटाएगा। यह हर कंप्यूटर भाषा में यह मामला है जिसका आप कभी भी उपयोग करेंगे - यह सिर्फ बाइनरी फ़्लोटिंग-पॉइंट गणित कैसे काम करता है। उदाहरण के लिए, this question about Haskell देखें।
फ़्लोटिंग पॉइंट समानता के परीक्षण के लिए, आप आमतौर पर यह जांचना चाहते हैं कि संख्या लक्ष्य की कुछ छोटी सीमा के भीतर है या नहीं। तो, उदाहरण के लिए:
def float_equal(a, b)
if a + 0.00001 > b and a - 0.00001 < b
true
else
false
end
end
आप रूबी में बिगडिसीमल कक्षा का भी मनमाने ढंग से दशमलव संख्याओं का प्रतिनिधित्व करने के लिए उपयोग कर सकते हैं।
यह एक परीक्षण मामला है, तो आप assert_in_delta
उपयोग कर सकते हैं:
def test_some_object_total_is_calculated_correctly
assert_in_delta 22.23, some_object.total, 0.01
end
क्या रूबी के संस्करण? 1.8.6 में कुछ फ्लोट अंकगणितीय बग हैं। – mckeed
हाय, आप फ्लोटिंग पॉइंट मुद्दों पर अपनी पोस्ट भी देख सकते हैं http://vladzloteanu.wordpress.com/2010/01/11/why-you-shouldnt-use-float-for-currency-floating-point-issues-explained -for-ruby-and-ror/ –