2010-10-12 14 views
7

मैं सेल्सियस फेरनहाइट से तापमान कन्वर्ट करने के लिए कोशिश कर रहा हूँ:ArgumentError "तर्कों की गलत संख्या" जब दौर का उपयोग कर

puts 'Convertir grados Fahrenheit a Celcius' 
STDOUT.flush 
x = gets.chomp 

aprox = (x * 100.0).round(2)/100.0 

resultado = (aprox-32)/1.8 

puts resultado 

मैं सेल्सियस के लिए फारेनहाइट परिवर्तित करने के लिए सही सूत्र का उपयोग करें:

Celsius = Fahrenheit - 32/1.8

हालांकि, जब मैं इसे कंसोल में चलाता हूं, तो यह मुझे निम्न त्रुटि देता है:

`round': wrong number of arguments (1 for 0) (ArgumentError)

मैंने अलग-अलग प्रयास किए हैं चीजें चीजें लेकिन मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है।

+0

http://stackoverflow.com/questions/2748911/error-in-rounding-off-values- के संभावित शिकार फ्लोट देता है उपयोग-राउंड-इन-रूबी – rogerdpack

उत्तर

11

1.9.0 round से पहले रूबी संस्करण में तर्क नहीं लेते हैं।

aprox = (x * 100).round()/100.0 

गुणा और 100 से विभाजित के पूरे मुद्दे एक्स के अंतिम दो अंकों पूर्णांक बनाना है: यह निकटतम पूर्णांक तक दौर इस बजाय

उपयोग करें (documentation about floats and the use of round देखें)।

+5

आपको अंत में 100.0 से विभाजित करना चाहिए। अन्यथा आप पूर्णांक विभाजन कर रहे हैं और केवल अंतिम दो अंक खो रहे हैं। – sepp2k

+0

ओह, बहुत बहुत धन्यवाद! मैं आपको वोट देना चाहता हूं, लेकिन मैं क्षमा नहीं कर सकता। – Ivanhercaz

+0

sepp2k इसे इंगित करने के लिए धन्यवाद। मैंने कोड को सही किया है। मैंने ग्रेग उत्तर के आधार पर एक परिशुद्धता भी जोड़ा है। –

5

आप निर्दिष्ट नहीं करते कि आप किस रूबी का उपयोग कर रहे हैं। इससे कोई फर्क पड़ता है, क्योंकि रुबीज़ में 1.9 फ्लोट # राउंड से पहले पैरामीटर नहीं लिया गया था। 1.9+ में यह करता है।

 
>> RUBY_VERSION #=> "1.9.2" 
>> pi = 3.141 #=> 3.141 
>> pi.round #=> 3 
>> pi.round(1) #=> 3.1 
>> 3.141.round(1) #=> 3.1 
+0

जानकारी के लिए धन्यवाद, मुझे यह नहीं पता और यह दिलचस्प है। – Ivanhercaz

2

activesupport (रेल का हिस्सा) भी आप # दौर (सटीक)

+0

ध्यान दें कि सक्रिय समर्थन का उपयोग रेल के बाहर किया जा सकता है। यह गैर-वेब रूबी ऐप्स के लिए उपयोगी भी हो सकता है। –

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