Problema di zeri con rails e la classe BigDecimal

Ciao,
Chiedo lumi anche qui per questo problema a cui no riesco a venire a
capo (spippolo da poco tempo con rails)
i numeri con piu di uno zero ai decimali vengono troncati al primo.

Ho bisogno di lavorare con numeri con 3 cifre decimali,sempre e cmq.
Nella mia migrazione ho quindi usato il tipo decimal con :precision => 3
Se inserisco nella mia form un numero questo viene automaticamente
portato a 3 cifre decimali nel database, ovvero:
se scrivo 123456 nel DB mi ritroverò 123456.000

e fin qui tutto bene, il problema salta fuori quando vado ad utilizzarlo
nel mio controller, devo scriverlo in un file di testo convertendolo in
stringa, e facendo questo nel mio file di testo trovo 123456.0
se i decimali sono diversi da 0 tutto funziona bene (es 123456.012 va
bene)
come posso fare per mantenere i 3 zeri finali?

Il giorno 04 agosto 2009 10.45, Luca C.[email protected] ha
scritto:

se scrivo 123456 nel DB mi ritroverò 123456.000

e fin qui tutto bene, il problema salta fuori quando vado ad utilizzarlo
nel mio controller, devo scriverlo in un file di testo convertendolo in
stringa, e facendo questo nel mio file di testo trovo 123456.0
se i decimali sono diversi da 0 tutto funziona bene (es 123456.012 va
bene)

è solo un problema di conversione in stringa:

a = BigDecimal.new “3”

puts a

0.3E1

puts “%.3f” % a

3.000

quindi usando “%.3f” non dovresti avere problemi.

pietro

Pietro G. wrote:

Il giorno 04 agosto 2009 10.45, Luca C.[email protected] ha
scritto:

se scrivo 123456 nel DB mi ritrover� 123456.000

e fin qui tutto bene, il problema salta fuori quando vado ad utilizzarlo
nel mio controller, devo scriverlo in un file di testo convertendolo in
stringa, e facendo questo nel mio file di testo trovo 123456.0
se i decimali sono diversi da 0 tutto funziona bene (es 123456.012 va
bene)

� solo un problema di conversione in stringa:

a = BigDecimal.new “3”

puts a

0.3E1

puts “%.3f” % a

3.000

quindi usando “%.3f” non dovresti avere problemi.

pietro

Ok ho provato in console e così funziona… grazie mille :slight_smile:
Adesso devo solo capire il modo migliolre per fare la conversione dentro
al mio controller… per adesso sono uscito con questa:
a3 = sprintf “%.3f”, a
e poi concatenare a3 al resto della stringa che devo infilare nel
testo…
vediamo cosa viene fuori

Grazie Ancora

Luca

Il giorno 04 agosto 2009 11.14, Luca C.[email protected] ha
scritto:

a3 = sprintf “%.3f”, a

va bene anche
a3 = “%.3f” % a

e poi concatenare a3 al resto della stringa che devo infilare nel
testo…

“ecco qui un po’ di testo, in cui vado a infilare #{”%.3f" % a} senza
concatenazioni."

oppure, per renderlo più chiaro,

numerodecimale = “%.3f” % a
“ecco qui un po’ di testo, in cui vado a infilare #{numerodecimale}
senza concatenazioni.”

pietro

Pietro G. wrote:

Il giorno 04 agosto 2009 11.14, Luca C.[email protected] ha
scritto:

a3 = sprintf “%.3f”, a

va bene anche
a3 = “%.3f” % a

Ancora meglio, in questo modo lo posso inserire direttamente nel codice
che genera la riga

e poi concatenare a3 al resto della stringa che devo infilare nel
testo…

“ecco qui un po’ di testo, in cui vado a infilare #{”%.3f" % a} senza
concatenazioni."

Vedi commento sopra

oppure, per renderlo pi� chiaro,

numerodecimale = “%.3f” % a
“ecco qui un po’ di testo, in cui vado a infilare #{numerodecimale}
senza concatenazioni.”

pietro

Grazie ancora, sapevo che probabilmente era di facile soluzione ma ci
stavo sbattendo la testa da un pò