Questo sembra orribile inefficiente. Qualcuno può darmi un modo migliore di Ruby.Un'implementazione migliore di Ruby di arrotondamento decimale più vicino a 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
Poiché questa soluzione aggiunge il metodo alla stessa classe Ruby, è possibile utilizzarla in questo modo: '(2.45) .round_point5' o' x.round_point5' – giraff
Decimale di classe - è una cosa di Rails? E cos'è il "valore"? – steenslag
woah, grazie @steenslag - ha corretto la cosa del valore che era erroneamente sbagliata. Ho anche cambiato Decimal in Float, perché mentre c'è una classe Decimal (e l'OP cita decimale nel titolo), probabilmente non è quello che intendevano ora che lo menzioni ... – Peter