575 messaggi dal 23 giugno 2003
www.padovaboy.it
Salve a tutti ;)
E' da un pò che non scrivo qui e brutalmente vi sfrutto per confrontarmi su un problema assurdo.
Mi capita ciò sia sotto Vista (IIS7) sia su windows2003(IIS6):

dim a,b
a = CDbl(5.01)
b = CDbl(5.00)
Response.Write a & " - "&b&" = "& ( a - b) & "<br>"
c = CDbl ( a - b)
Response.Write c & "<br>"

Sputa questo:

5,01 - 5 = 9,99999999999979E-03
9,99999999999979E-03

Ora 5.01 - 5 a casa mia fa 0.01...non certamente 9,9...

Qualcuno sa aiutarmi?
Tnnxx!!!

www.padovaboy.it dal 2001 con furore :D
575 messaggi dal 23 giugno 2003
www.padovaboy.it
Ok è un problema di rappresentazione dei numeri...evidentemente ho da studiare un altro pò :))

Fatto sta che se faccio:

dim a,b
a = CDbl(5.01)
b = CDbl(5.00)
Response.Write a & " - "&b&" = "& ( a - b) & "<br>"
c = CDbl ( a - b)
d = a -c '<--- 5.01 - 9,999999.... = 5! YESS!
Response.Write c & "<br>"
Response.Write d & "<br>"

Ottengo questo risultato:
5,01 - 5 = 9,99999999999979E-03
9,99999999999979E-03
5 <--!!!!

Ovvero 5 è il risultato di 5.01 - 9.9999

Il problema sta nella rappresentazione float del numero che differisce dal concetto naturale di numero.

Se voglio "visualizzare correttamente" il valore devo usare qualcosa come:

FormatNumber(CDbl ( a - b), 6)
dove 6 è il numero massimo di cifre decimali che voglio mostrare.
A quel punto mi sputa: 0.010000

Mi è stato consigliato di studiarmi il problema qui:
http://en.wikipedia.org/wiki/Floating_point

Evvai con le cose che davo per scontate ;)

www.padovaboy.it dal 2001 con furore :D

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.