Newsgroup: it.comp.lang.visual-basic
Titolo: VB Impazzito???

Vi illustro la situazione:
MediaCompleta viene fuori dalla divisione 88,44 / 8 e quindi fa
esattamente
11,055
A me serve TRONCARE un numero che inizialmente puo avere anche 10 cifre
decimali con quattro cifre decimali (esempio 10,1235678 deve diventare
10,1235) e quindi cosa ho fatto?
Arr = Int(MediaCompleta * 10000) / 10000
Mi restituisce 11,0549
Ho messo un punto di interruzione ed ho cliccato sulla parola "Int" e mi
dà
"Int(MediaCompleta * 10000) = 110549"
Per lui l'intero di 110550 è 110549 ?????????????????????????
E' impazzito????????????
Per cortesia...ditemi come posso bypassare il problema: dato un numero
con x
decimali voglio trasformarlo in un numero con 4 decimali (troncando i
restanti senza quindi arrotondamento)
La mia funzioncina funziona correttamente nel caso i decimali siano >= 4
ma
come avete visto...con 3 dec. non funziona
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 11,055
In virgola fissa.
Ma in virgola mobile?
Alberto

 10,1235) e quindi cosa ho fatto?
Questo è un annoso problema: i numeri a virgola mobile non sempre possono
essere rappresentati correttamente in binario.
Come risolvere?
Per ora mi limito a suggerirti una soluzione "personalizzata": usa variabili
di tipo Currency.
Queste sono degli interi scalati (interi a cui viene piazzato il separatore
in mezzo) quindi non soffrono di errori di arrotondamento e guarda caso
hanno proprio 4 decimali, che però sono 4 fissi.
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 hanno proprio 4 decimali, che però sono 4 fissi.
Non può esistere una soluzione utilizzando anche campi di testo e poi
facendo qualcosa come Cdbl(campoditesto)  ????


 facendo qualcosa come Cdbl(campoditesto)  ????
Non ho capito la domanda.
Puoi usare anzichè CDbl() (che ti riporta all'uso di double) CCur().
L'unico problema è che se visualizzi un currecy VB di default lo traduce con
il simbolo valuta, ad es. 123.4 diventerebbe a video ad es. "$ 123.45",
quindi devi formattarlo "a mano":
TextBox1.Text = Format$(myCurrency, "#,##0.0000")
magari con una funzioncina:
Function CurToStr(ByVal value as Currency) As string
    CurToStr = Format$(value, "#,##0.0000")
End Function
TextBox1.Text = CurToStr(myCurrency)


 facendo qualcosa come Cdbl(campoditesto)  ????
Volendo, si può fare, ma è un po' complesso (oltre che un vero cesso quanto
a bellezza).
Innanzitutto devi passare da numerico a testo.
Per fare ciò, puoi usare CStr o Format$. Se a te serve un numero fisso di
decimali, devi usare il format$.
Però il format$, non tronca, bensì arrotonda. E non è questo che tu volevi.
Allora devi usare il CStr. Poi ti scrivi un parser tuo che individua il
separatore dei decimali (da ricavare secondo le impostazioni del S.O.), si
sposta a destra di 4 caratteri e poi tronca.
Poi devi tornare al numerico.
Se usi CDbl, ti tiri una martellata sui maroni, perchè torni in virgola
mobile, che è il tuo problema (e già qui il tuo quesito mi fa venire il
dubbio che tu non abbia capito una beata fava del tuo problema).
Allora devi usare CDec, che ti converte il testo in Variant con sottotipo
Decimal, che è l'unico tipo corretto al riguardo.
Sarebbe corretto anche il Currency, ma se domani devi usare 5 decimali, non
si può punto e basta, per cui lasciamo stare per il momento.
E dopo avere scritto queste 30-40 righe di codice, mi chiederai perchè mai
non si poteva fare CDec del primo operando del tuo calcolo, in modo da
prevenire tutto a priori.
E io sarò costretto a risponderti che io e Zanna la risposta te l'avevamo
già data, ma che forse ritenevi più semplice cercare strade apparentemente
semplici anzichè sforzarti a individuare il vero problema e imparare una
cosa nuova.
Ciao
Alberto

 e guarda caso hanno proprio 4 decimali, che però sono 4 fissi.
e sempre + spesso invece mi tocca lavorare con Eurini con 5 cifre decimali
...
bha !
Lo fanno a posto ?
-- 
<Gigio2K>
--- 
http://www.g2kweb.it/gigio2k
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 che però sono 4 fissi.
Non proprio, 4 sono le cifre visualizzate/abili me ne vengono usate 5 per i
calcoli.
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

 restanti senza quindi arrotondamento)
Uff!
Un'altro che non ha studiato la matematica a virgola mobile dei calcolatori!
Andrea