Sono curioso anch’io di conoscere un modo migliore; quando è servito a me
ho usato sprintf("%.2f", float_num) e ha funzionato. Di sicuro non è molto
elegante…
Ma printf() e’ solo un comando formattazione per la stampa di un numero
arrotondato?
Se cosi’ fosse in memoria mi rimane il numero originale: io, invece,
devo avere un risultato arrotondato ai centesimi per inserirlo in una
tabella di MySql.
Trattandosi un un piccolo programmino di contabilita’ generale non posso
permettermi, comunque, imprecisioni nei numeri trattati, pena eventuali
squadrature dei conti fra dare ed avere (la quadratura dei conti e’
l’ossessione di noi ragionieri)
Ma printf() e’ solo un comando formattazione per la stampa di un numero
arrotondato?
Non credo ci sia un modo built-in, probabilmente ci sarà qualcosa in
qualche ext ma del resto le classi aperte di Ruby sono belle e se ti
serve solo quello basta sfruttarle
class Float
def round(precision = nil)
if precision.nil? then
super()
else
if precision.is_a? Integer and precision > 0 then
decimals = 10 ** precision
(self * decimals).round / decimals.to_f
else
raise ArgumentError.new(“Argument must be a positive
integer”)
end
end
end
end
Ma printf() e’ solo un comando formattazione per la stampa di un numero
arrotondato?
Se cosi’ fosse in memoria mi rimane il numero originale: io, invece,
devo avere un risultato arrotondato ai centesimi per inserirlo in una
tabella di MySql.
Trattandosi un un piccolo programmino di contabilita’ generale non posso
permettermi, comunque, imprecisioni nei numeri trattati, pena eventuali
squadrature dei conti fra dare ed avere (la quadratura dei conti e’
l’ossessione di noi ragionieri)
Allora printf è un comando di output generico, comunque MAI usare in
nessun linguaggio numeri decimali per operazioni in qui hai bisogno di
essere preciso, usa invece i bignum piuttosto.
Il giorno 26/dic/07, alle ore 20:52, antonio guerra ha scritto:
Trattandosi un un piccolo programmino di contabilita’ generale non
posso
permettermi, comunque, imprecisioni nei numeri trattati, pena
eventuali
squadrature dei conti fra dare ed avere (la quadratura dei conti e’
l’ossessione di noi ragionieri)
Per evitare questo tipo di problemi quando l’arrotondamento è molto
importante di solito si preferisce memorizzare i centesimi piuttosto
che il valore con virgola, e dividerlo per 100 solo prima di
visualizzarlo.
Esatto, i numeri in virgola mobile portano sempre con loro errori di
arrotondamento che purtroppo non sono mai trascurabili. Il mio consiglio
è di usare la classe BigDecimal della libreria standard.
Ciao,
Giovanni
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.