Newsgroup: it.comp.lang.visual-basic
Titolo: Chi me lo spiega??

VB6
int(80.1 * 100) = 8009
?!??! contando con le ditina, mi fa' 8010

hai provato a fare int(80.1 ) ?
:)
<max...@hotmail.con> ha scritto nel messaggio
news:g6gc9t4s1jgpf4kbd...@4ax.com...



Hai provato ad utilizzare la funzione CInt al posto di Int ?
Con CInt(80.1 * 10) = 8010
Prova!
Ciao Osvaldo

cmq maxdanc non ha mosso un dubbio errato.....
INT dovrebbe togliere la parte decimale
CINT arrotonda all'unità
CINT funziona bene
INT no.....mah.....

 Con CInt(80.1 * 10) = 8010
Anche CInt ha i suoi problemi, visto che arrotonda al più vicino numero
intero pari, secondo la logica del Banker's Round, che viene usata in
America, ma non da noi.
Ad esempio:
CInt(0.5) = 0
CInt(1.5)=2
Ciao
*Roby*
P.S.
Oltretutto affermare che 0 sia un numero pari farebbe inorridire qualunque
matematico.



il problema non e' la parte decimale .... il prodotto dei due fattori
passato successivamente attraverso la funzione INT restituisce un
risultato proprio sbagliato!! .... se a scuola facevo una ca%%ata del
genere beccavo un bel 4!!!!!!!!!!!! .. che culo invece essere sul
libero mercato!! ..sigh ..vero bill?!



CINT arrotonda ...e io non voglio questo. Cmq ..il problema e' che
sbaglia proprio il prodotto

<max...@hotmail.con> ha scritto nel messaggio
news:q4lc9tgp4011eihu1...@4ax.com...

In effetti il comportamento č strano
Prova questo codice:
Dim a As Single
Dim b As Single
Dim c As Single
a = 80.1
b = 100
Debug.Print a * b
Debug.Print Int(a * b)
c = a * b
Debug.Print c, Int(c)
Quando il valore lo assegni a C, il risultato č corretto, quando invece
chiami la INT sull'operazione no.
Ho provato a dichiarare C sia come single precision che come double e il
risultato non cambia.
Inoltre l'errore della INT c'č anche se tenti di fare una conversione
implicita mettendo le doppie parentesi con: Debug.Print Int((a * b))
Deve essere un caso particolarmente sfigato. Probabilmente mentre stai
facendo la moltiplicazione lui mantiene il risultato in una variabile
temporanea che usa la notazione di mantisse e esponente e lo salva come
8009.9999999, mentre quando inserisci il valore in una variabile, si accorge
che č un intero e non un valore in virgola mobile e lo arrotonda
automaticamente all'intero piů vicino.
Il fatto che questo non avvenga prima della INT č comunque sicuramente un
errore.
Ciao
*Roby*

 int(80.1 * 100) = 8009
C'è un BUG nella funzione INT a quanto pare.
Per risolvere puoi fare cosi:
   Dim a As Integer
   a = 80.1 * 100       = 8010
Ciao
G.C.
PS: Si dovrebbe controllare sul sito Microsoft se c'è qualche cenno a questo
problema.


sbaglia proprio il prodotto
]zac[

Mi e' venuto un dubbio, prova questo e dimmi cosa ti ritorna:
 int(80.1 * 100.0)
Salve
                Dbg
Della Bianca Giuseppe ha scritto nel messaggio ...


 ?!??! contando con le ditina, mi fa' 8010
E' un bel baco
Facendo un po' di prove a me succede:
int(3.1 * 100) = 310
int(4.1 * 100) = 409

CINT arrotonda all'unità
Mettiamola così: Int è sconsigliato anche da M$, Cint arrotonda in modo
errato (metodo americano).
Rimarrebbe il Fix per eliminare la parte decimale.
Ciao

 ha scritto nel messaggio
news:%%yl6.5992$q97....@twister1.tin.it...


 ?!??! contando con le ditina, mi fa' 8010
Pare si debbano usare le ditine negative. Quelle che, per esempio, mettiamo
nel naso, in bocca, ecc.:
    -int(-80.1*100)
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 > ?!??! contando con le ditina, mi fa' 8010
La risposta al quesito e' che 80.01*100 viene trattato come un single con i
suoi inevitabili limiti di arrotondamento che si ripercuotono sul risultato
della funzione Int()
La domanda delle domande secondo me e':
a che servono tante funzioni di conversione? Appesantiscono inutilmente il
linguaggio.

    Se Fai Round(9.9,0) il risultato è 10 :)
Attenzione: non funziona meglio, funziona diversamente: Fix toglie i
decimali, round... beh, lo dice il nome stesso.
Ciao

 ha scritto nel messaggio
news:suMl6.7233$q97.1...@twister1.tin.it...


Ritiro tutto, tanto per tenermi in allenamento ho sparato delle cavolate.
int ha un bug con i dati di tipo double, provate questa:
?int(cdbl(80.1 * 100)), int(csng(80.1 * 100))
Salve
                Dbg
max...@hotmail.con ha scritto nel messaggio ...
