2010-10-12 20 views
7

Próbuję przekonwertować temperatury z Fahrenheita na stopnie Celsjusza:„nieprawidłowa liczba argumentów” ArgumentError podczas korzystania runda

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 

używam poprawną formułę do konwersji Fahrenheita na Celsjusza:

Celsius = Fahrenheit - 32/1.8

Jednak po uruchomieniu tego w konsoli, pojawia się następujący błąd:

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

Próbowałem różnić ent rzeczy, ale nie rozumiem, dlaczego to nie działa.

+0

możliwie duplikatem z http://stackoverflow.com/questions/2748911/error-in-rounding-off-values- using-round-in-ruby – rogerdpack

Odpowiedz

11

W wersji ruby ​​przed 1.9.0 round nie przyjmuje argumentów. To zaokrągla do najbliższej liczby całkowitej (patrz documentation about floats and the use of round)

stosowany zamiast:

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

Istotą mnożenia i dzielenia przez 100 ma zaokrąglenie dwie ostatnie cyfry x.

+5

Powinieneś podzielić przez 100.0 na końcu. W przeciwnym razie wykonujesz podział liczb całkowitych i właśnie tracisz dwie ostatnie cyfry. – sepp2k

+0

Och, dziękuję bardzo! Chcę ci głosować, ale nie mogę, przepraszam. – Ivanhercaz

+0

sepp2k Dzięki za wskazanie tego. Poprawiłem kod. Dodałem również precyzję opartą na odpowiedzi Grega. –

5

Nie określasz wersji Ruby, której używasz. To robi różnicę, ponieważ w Rubinach przed 1.9 runda Float # nie wzięła parametru. W wersji 1.9+ to robi.

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

Dzięki za informację, nie wiem tego i to jest interesujące. – Ivanhercaz

2

ActiveSupport (część szyn) daje ci również Float # rundę (precyzja)

+0

Należy pamiętać, że Activesupport może być używany poza szynami. Może to być nawet użyteczne w aplikacjach bez rubinu internetowego. –

Powiązane problemy