Problema con i cicli in vb.net (vigola)

lunedì 05 giugno 2006 - 17.43

dando Profilo | Newbie

Ciao a tutti ho un problema con i cicli. Prendiamo ad esempio:

deltapi = p0 / 100
For i1 = 1 To 100
pp(i1) = pp(i1 - 1) - deltapi

ecc...


Next

per i primi cicli funziona tutto bene. dal quinto o il sesto in poi invece di darmi un valore preciso nel vettore pp()
mi mette un numero con un casino di numeri decimali molto prossimo a quello teorico. ad esempio invece di
essere 18 mi scrive 18.0000000000002 oppure 17.99999999999997.
Come mai?
qualcuno mi saprebbe dare una mano?
perche lo fa solo da un certo ciclo in poi?
grazie per l'aiuto

19018 Profilo | Expert

>deltapi = p0 / 100
>For i1 = 1 To 100
>pp(i1) = pp(i1 - 1) - deltapi

Come hai dichiarato le variabili, di che tipo?


Stefano Passatordi

http://blogs.dotnethell.it/stem/

dando Profilo | Newbie

Tutte di tipo double.

che rapidita!

19018 Profilo | Expert

>Tutte di tipo double.

Lo immaginavo, è normale che sia così. Essendo un double un numero a 64 bit a precisione doppia ti riporta tutta la sfilza di cifre. Se vuoi troncare il risultato devi fare un cast implicito (dichiarando risultato come int) oppure esplicito usando CType.

ciao


Stefano Passatordi

http://blogs.dotnethell.it/stem/

dando Profilo | Newbie

Ok... su questo son d'accordo. pero non capisco perche mi approssimi cosi un intero
d'altronde se deltapi è 0.5 non è ne 0.49999999997 ne 0.50000000001 o no?
oppre è proprio cosi?

19018 Profilo | Expert

Se da double lo casti ad int un numero del tipo y,kkkk diventa solo y. Se ancora ottieni valori con la virgola allora sbagli il cast.Cosa non capisci?

Stefano Passatordi

http://blogs.dotnethell.it/stem/

dando Profilo | Newbie

Capisco che se converto in intero me lo metta a posto. ma non capisco perche fa delle approssimazioni del genere semplicemente con sottrazioni di numeri interi. Tra le altre cose non è neanche fondamentale per quello che sto facendo ma mi chiedevo solo se sbagliavo da qualche parte. Che mi approssimi un numero a 10 cifre decimali con una divisione periodica ci puo stare ma con una sottrazione di interi un po meno. cmq se mi dici che e normale allora son tranquillo!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5