# Problema di zeri con rails e la classe BigDecimal

**URL:** <https://www.ruby-forum.com/t/problema-di-zeri-con-rails-e-la-classe-bigdecimal/173171>\
**Category:** IT\
**Created:** [August 4, 2009, 10:45am UTC](https://www.ruby-forum.com/t/problema-di-zeri-con-rails-e-la-classe-bigdecimal/173171 "2009-08-04T10:45:47Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 4, 2009, 10:45am UTC](https://www.ruby-forum.com/t/problema-di-zeri-con-rails-e-la-classe-bigdecimal/173171/1 "2009-08-04T10:45:47Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 4, 2009, 10:54am UTC](https://www.ruby-forum.com/t/problema-di-zeri-con-rails-e-la-classe-bigdecimal/173171/2 "2009-08-04T10:54:12Z")

</div>

Il giorno 04 agosto 2009 10.45, Luca C.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 4, 2009, 11:14am UTC](https://www.ruby-forum.com/t/problema-di-zeri-con-rails-e-la-classe-bigdecimal/173171/3 "2009-08-04T11:14:41Z")

</div>

Pietro G. wrote:

> Il giorno 04 agosto 2009 10.45, Luca C.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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 🙂  
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

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 4, 2009, 11:21am UTC](https://www.ruby-forum.com/t/problema-di-zeri-con-rails-e-la-classe-bigdecimal/173171/4 "2009-08-04T11:21:08Z")

</div>

Il giorno 04 agosto 2009 11.14, Luca C.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 4, 2009, 11:29am UTC](https://www.ruby-forum.com/t/problema-di-zeri-con-rails-e-la-classe-bigdecimal/173171/5 "2009-08-04T11:29:08Z")

</div>

Pietro G. wrote:

> Il giorno 04 agosto 2009 11.14, Luca C.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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Ã²
