2009-09-19 26 views
12

को विभाजित करने से इंकार कर देता है मैं बस प्रतिशत प्राप्त करने की कोशिश कर रहा हूं।रूबी सही ढंग से

irb(main):001:0> (25/50) * 100 
=> 0 

यह सबसे निश्चित रूप से बराबर 50, के रूप में मेरे कैलकुलेटर द्वारा की पुष्टि की (नकल की और gcalc में इसी समीकरण चिपकाया) चाहिए। रूबी ऐसा करने से इंकार क्यों करती है?

+11

वैसे , यदि विभाजन वास्तव में रूबी में टूट गया था, तो क्या आपको सच में लगता है कि आप इसे नोटिस करने वाले पहले व्यक्ति होंगे? यह हमेशा मुझे आश्चर्यचकित करता है कि लोग एक अप्रत्याशित व्यवहार कैसे देखते हैं और हमेशा मानते हैं कि यह भाषा, पुस्तकालय, पर्यावरण इत्यादि की गलती है, और कभी भी अपने कोड की गलती नहीं है ... –

+0

@ Daniel: बस रूबी नहीं, कोई भी भाषा ... – gbn

+0

अधिकांश भाषाएं इस तरह काम करती हैं, जावास्क्रिप्ट एक उल्लेखनीय अपवाद है। असल में रूबी अतिरिक्त ठंडा है, जब आपको अधिक सटीकता की आवश्यकता होती है तो स्वचालित रूप से फिक्सनम से बिग्नम तक स्थानांतरित हो जाती है। (बीटीडब्लू, यह और कौन करता है? कुछ लांग होना चाहिए जो इसे करता है ...) – DigitalRoss

उत्तर

28

यह पूर्णांक विभाजन कर रहा है।

असल में, 25 एक पूर्णांक (एक पूर्ण संख्या) है और इसलिए 50 है, इसलिए जब आप एक दूसरे को विभाजित करते हैं, तो यह आपको एक और पूर्णांक देता है।

25/50 * 100 = 0.5 * 100 = 0 * 100 = 0 

इसे करने का बेहतर तरीका सबसे पहले गुणा करना है, फिर विभाजित करना है।

25 * 100/50 = 2500/50 = 50 

तुम भी चल उपयोग कर सकते हैं बिंदु गणित स्पष्ट रूप में के रूप में एक दशमलव बिंदु निर्दिष्ट द्वारा:

25.0/50.0 * 100 = 0.5 * 100 = 50 
+1

धन्यवाद दोस्तों से इंकार कर रहा था! मैं ओपन-यूरी में एक फाइल खोलने के प्रतिशत को पूरा कर रहा था। यहां मैंने जो उपयोग किया है: प्रतिशत = (file_downloaded.to_f/file_length.to_f) * 100 – RyanScottLewis

+0

तब दूसरे फॉर्म का उपयोग करें। फ्लोटिंग पॉइंट नंबरों में कनवर्ट करने की कोशिश करना आसान है। –

+0

या इसके बजाय, पहला समाधान। गुणा करें तो एक विभाजित करें। आप जानते हैं कि मेरा क्या मतलब है। –

9

क्योंकि आप एक पूर्णांक द्वारा एक पूर्णांक विभाजित कर रहे हैं, तो परिणाम पूर्णांक छोटा कर दिया हो रही है (0.5 -> 0) 100.

से गुणा करने से पहले और लेकिन यह काम करता है:

>> (25/50) * 100 
=> 0 
>> (25.0/50) * 100 
=> 50.0 
+0

यह एक महान स्पष्टीकरण है। दूसरे शब्दों में यदि आपके गणना के लिए उत्तर कम है तो 1 ... रूबी इसे 0 बना देगा। – FlyingV

संबंधित मुद्दे