Newsgroup: it.comp.lang.visual-basic
Titolo: [?]valore strano restituito da Int

Come suggeritomi da Alessandro Scardova qualche tempo fa (grazie mille),
utilizzo la funzione Int (con VB5) per troncare i decimali di un numero.
Ora, però mi succede una cosa che non capisco.
dim numero as double
    '<calcoli vari...>
    '<dai calcoli eseguiti nel prg, numero vale 1,44 quindi>
    numero = Int(numero * 1000) / 1000
Il risultato di quanto sopra è 1,439!
La cosa strana è che la stessa espressione la uso in altre parti del mio prg
e funziona correttamente.
Cosa diavolo succede!?
Grazie
Cesare Nicola

...


1,439 e che il problema sia in una non corretta visualizzazione
So che è strano, eppure è proprio 1,44: lo vedo in debug, con controllo
immediato. Inoltre i calcoli che precedono la funzione Int sono estremamente
semplici, non c'è possibilità di errore (eseguendoli con la calcolatrice,
trovo 1,44).
ecco il codice originale:
   AreaMateriale = LarghezzaMateriale * LunghezzaMateriale
   AreaMateriale = AreaMateriale / 1000000
   AreaMateriale = Int(AreaMateriale * 1000) / 1000
'LarghezzaMateriale è uguale a 1200
'LunghezzaMateriale è uguale a 1200
'Eseguendo la seconda riga, AreaMateriale risulta 1,44: dopo la terza riga,
risulta 1,439
BOH!
Ciao
Cesare Nicola

...


...
Scusate, l'intromissione, ma stavo cercando di duplicare il problema,
(ho avuto anch'io un po' di prb strani, vedi il mio post [?]Bug di Format ?
del 20-05) e non ci sono riuscito, a me dà regolarmente 1.44, con tutt'e due
i sistemi.
Che versione di VB/SP/SO avete ?
Bye, G.
--
------------------------------------------------
In questa signature ci andrebbe una bella frase,
appena ne trovo una buona ce la metto...
------------------------------------------------
Real E-address: 
gaet...@hotmail.com

Win 98, Office 97, Vb5 e SP3
installati nell'ordine
Saluti By MAX


Non riesco a riprodurre l'errore, comunque è sempre consigliabile utilizzare
CInt/CLng anzichè Int().
Provaci.
Ciao.

Che versione di VB/SP/SO avete ?
Io ho:
Win 98, Office 97, Vb5 Professional
Essendo un principiante, non so cosa sia SP :))
Ciao
Cesare Nicola

    AreaMateriale = Int(AreaMateriale * 1000) / 1000
quando, sapendo che con i numeri reali e' meglio evitare troppe conversioni
di scala, potevi fare:
    AreaMateriale = LarghezzaMateriale * LunghezzaMateriale
    AreaMateriale = AreaMateriale / 1000
    AreaMateriale = Int(AreaMateriale) / 1000
--
Roal Zanazzi
z...@iol.it

Concordo pienamente
Saluti By MAX

...


Il risultato di quanto sopra č 1,439!

Ciao,
Ho provato quello che ti ho suggerito ma non funziona ancora.
Il problema sta nella moltiplicazione di numero (double) per mille: è già
quella che da' 1439 invece di 1440. Se però numero è un Single funziona tutto
bene. Puoi allora scrivere:
numero = Int(CSng(numero) * 1000) / 1000
Icredibile ma vero !!! Non avevo mai notato questo tipi di problemi con il VB,
forse perchè non ho mai usato la precisione Double. Sei proprio sicuro che non
ti basti la precisione Single ?
Ciao, Gianpaolo.

...


e funziona correttamente.
Ciao,
ti avevo già scritto un messaggio ma con una risposta che in pratica non
funzionava. Ho poi riprodotto anch'io il bug (incredibile !) ed ho visto che lo
puoi eliminare se "numero" è un Single anzichè un Double. Cioè se scrivi:
numero = Int(CSng(numero) * 1000) / 1000
funziona ! Il problema è già nella moltiplicazione per 1000, che dà 1439 anzicè
1440 se numero è un doubl !
Ti serve proprio la precisione Double ?
Saluti,
Gianpaolo.

...

Sì, è vero, mi basta la Single. Siccome sono ancora inesperto, avevo usato
la Double "per star sicuro".
Si vede che il destino voleva che trovassi 'sto bug :))
Ciao
Cesare Nicola