Forum: Italian Ruby user group Arrotondamento risultati

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2dc699b167642219909dd77a1ee9af2f?d=identicon&s=25 Niko Ruby (Guest)
on 2009-02-25 11:03
(Received via mailing list)
Ciao a tutti!
Devo sviluppare un piccolo programma che faccia dei controlli da 4 fonti
diverse ( 2 DB e 2 server http ) e che in caso di grosse discrepanze tra
i valori ottenuti, mi segnali un errore.

Vorrei fare in modo che se ricevo valori molto simili come ad esempio:

6,5
6,499
6,51
6,509

non venissero segnalati come errore. Conoscete qualche gemma/metodo che
mi permetta di  "arrotondare" i risultati ottenuti ?
Grazie



      Passa a Yahoo! Mail.

La webmail che ti offre GRATIS spazio illimitato,
antispam e messenger integrato.
http://it.mail.yahoo.com/              
8768bcdbda1adf80e4da6744268868af?d=identicon&s=25 Pietro Giorgianni (giorgian)
on 2009-02-25 11:10
(Received via mailing list)
2009/2/25 Niko Ruby <lecce07-ruby@yahoo.it>:
> non venissero segnalati come errore. Conoscete qualche gemma/metodo che mi permetta di  
"arrotondare" i risultati ottenuti ?
per un'arrotondamento alla buona, puoi ad esempio fare: (numero *
10).round.

purtroppo, però, i float di ruby lasciano un po' a desiderare quando
si tratta di numeri decimali:

puts 1.021 - 1.02
0.00099999999999989

per questo esiste la classe BigDecimal, che è un po' scomoda da usare
in certi casi, perché il costruttore accetta una stringa; però direi
che nel tuo caso va benissimo, visto che i numeri, immagino, ti
arrivano spesso in forma di stringa.

puts BigDecimal("1.021") - BigDecimal("1.02")
0.001

non so com'è implementata, e che performance ha. prova, se vedi che è
pesante, cerca una soluzione alternativa.


pietro
36f352bc8c234dbde21cb30e89767824?d=identicon&s=25 Luigi Panzeri (Guest)
on 2009-02-25 12:14
(Received via mailing list)
Il giorno 25/feb/09, alle ore 11:02, Niko Ruby ha scritto:
> Grazie
>
>

Dipende dalla natura del tuo problema. Se si tratta di soldi prova ad
usare la gemma money, se invece sono valori reali allora stabilisci
una tolleranza e controlla

(val1 - val2).abs < tolerance

piuttosto che l'uguaglianza.

E primi di prendertela con i float assicurati di conoscere cosa e'
scritto in

http://docs.sun.com/source/806-3568/ncg_goldberg.html

PDF: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=1...
D716730ae3c9f3322f49d002192befc6?d=identicon&s=25 Alessandro Scolavino (ninjinka)
on 2009-03-02 21:07
io di solito faccio così

format("%.2f", [float value] )

Luigi Panzeri wrote:
> Il giorno 25/feb/09, alle ore 11:02, Niko Ruby ha scritto:
>> Grazie
>>
>>
>
> Dipende dalla natura del tuo problema. Se si tratta di soldi prova ad
> usare la gemma money, se invece sono valori reali allora stabilisci
> una tolleranza e controlla
>
> (val1 - val2).abs < tolerance
>
> piuttosto che l'uguaglianza.
>
> E primi di prendertela con i float assicurati di conoscere cosa e'
> scritto in
>
> http://docs.sun.com/source/806-3568/ncg_goldberg.html
>
> PDF: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=1...
0df4a6c75caf1bd9b01d2dcbfb085ee4?d=identicon&s=25 Sandro Paganotti (Guest)
on 2009-03-02 23:25
(Received via mailing list)
On Mon, Mar 2, 2009 at 8:07 PM, Alessandro Scolavino
<scolas@gmail.com>wrote:

> io di solito faccio così
>
> format("%.2f", [float value] )
>


Anche io tendo ad utilizzare il metodo '%', del quale apprezzo parecchio
la
potenza
(link: http://www.ruby-doc.org/core/classes/String.html#M000785)

   "%05d" % 123                       #=> "00123"
   "%-5s: %08x" % [ "ID", self.id ]   #=> "ID   : 200e14d6"
This topic is locked and can not be replied to.