2010-10-12 17 views
7

Sto cercando di convertire una temperatura da Fahrenheit a Celsius:"numero errato di argomenti" ArgumentError quando si utilizza tutto l'

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 

Io uso la formula corretta per la conversione Fahrenheit a Celsius:

Celsius = Fahrenheit - 32/1.8

Tuttavia, quando eseguo questo nella console, mi dà il seguente errore:

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

Ho provato differire ent cose ma non capisco perché questo non funziona.

+0

possibile vittima di http://stackoverflow.com/questions/2748911/error-in-rounding-off-values- using-round-in-ruby – rogerdpack

risposta

11

Nella versione con rubino precedente alla 1.9.0 round non accetta argomenti. Arrotonda al numero intero più vicino (vedi documentation about floats and the use of round)

Usare questo invece:

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

Il punto di moltiplicare e dividendo per 100 è di arrotondare le ultime due cifre di x.

+5

Si dovrebbe dividere per 100.0 alla fine. Altrimenti stai eseguendo la divisione di interi e solo perdendo le ultime due cifre. – sepp2k

+0

Oh, grazie mille! Voglio darti un voto, ma non posso, mi dispiace. – Ivanhercaz

+0

sepp2k Grazie per avermelo fatto notare. Ho corretto il codice. Ho anche aggiunto una precisione basata sulla risposta di Greg. –

5

Non si specifica quale versione di Ruby si sta utilizzando. Questo fa la differenza, perché in Rubies precedenti a 1.9 Float # round non ha preso un parametro. In 1.9+ lo fa.

 
>> 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

Grazie per l'informazione, non lo so ed è interessante. – Ivanhercaz

2

ActiveSupport (parte di rotaie) dà anche Float # round (precisione)

+0

Si noti che il supporto attivo può essere utilizzato fuori dai binari. Può anche essere utile per le app ruby ​​non web. –

Problemi correlati