To wydaje się okropne nieefektywne. Czy ktoś może mi dać lepszy sposób na Ruby?Lepsza implementacja Ruby rundy dziesiętnej do najbliższej 0.5
def round_value
x = (self.value*10).round/10.0 # rounds to two decimal places
r = x.modulo(x.floor) # finds remainder
f = x.floor
self.value = case
when r.between?(0, 0.25)
f
when r.between?(0.26, 0.75)
f+0.5
when r.between?(0.76, 0.99)
f+1.0
end
end
Ponieważ to rozwiązanie dodaje metodę do samej klasy Ruby, możesz jej użyć w następujący sposób: '(2.45) .round_point5' lub' x.round_point5' – giraff
klasa dziesiętna - czy to coś z Railsów? A czym jest "wartość"? – steenslag
Woah, dzięki @steenslag - naprawiono wartość rzeczy, która była rażąco błędna. Zmieniłem także wartość dziesiętną na zmienną, ponieważ podczas gdy istnieje klasa dziesiętna (i OP wymienia dziesiętny w tytule), to prawdopodobnie nie jest to, co mieli na myśli teraz, kiedy o tym wspomniałeś ... – Peter