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ò

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs