Newsgroup: it.comp.lang.visual-basic
Titolo: Lire-->Euro come vi sembra questa funzione?

Provate questa funziona e ditemi cosa ne pensate. Io comunque la uso
correntemente e (per quel che mi seve) funziona egrgiamente.
a Voi come sembra?
Se qualcuno applica qualche correzione è la benvenuta.
Ecco la funzione:
Public Function conValuta(xValuta As Variant) As String 'As Variant
'se xValuta è vuoto non deve eseguire la procedura
If xValuta = "" Then
    Exit Function
End If
'----dichiarazioni variabili----------------
Dim troncamento As Integer 'troncamento dei decimali
Dim posizione As Integer 'posizione della virgola
Dim ndecimali As Integer 'numero dei decimali
Dim i As Integer 'contatore
Dim posArr As Integer
Dim valore As Currency
Dim arrotondamento As String
Dim decimali As String
troncamento = 2 'decido di troncare i decimali alla 2° cifra
posArr = 3 'se devo arrotondare alla 2° cifra devo aggiungere 1
valore = xValuta / 1936.27 'converto in euro
posizione = InStr(1, valore, ",", 1) 'trovo la posizione della virgola
If posizione = 0 Then
  conValuta = CStr(valore) + ",00"
  Exit Function
End If
'N.B. i decimali solitamente sono di più di quelli che contiene la
variabile
ndecimali = ((Len(CStr(valore))) - posizione) 'tot numero decimali
dopo la vergola
decimali = Mid$(valore, posizione + 1, ndecimali) 'estrae i decimali
'List1.AddItem valore ndecimali
For i = 3 To posArr Step -1 'il posArr decide a quale decimale fare
l'arrotondamento
'controlla dall'ultimo decimaleal primo se sono superiori o ugali a 5
    If Val(Mid$(decimali, i, 1)) >= 5 Then 'incrementa il decimale
controllato -1 di 1
        arrotondamento = String$((i - 2), "0") 'mi costruisco
l'arrotondamento
        arrotondamento = "0," & arrotondamento & "1"
        valore = valore + arrotondamento 'sommo a volore
l'arrotondamento
    End If
    decimali = Mid(valore, (posizione + 1), (i - 1)) 'togli il
decimale in coda
 
    'List1.AddItem valore
Next i
conValuta = Mid$(valore, 1, (posizione + troncamento)) 'il 4 decide
quanti decimali visualizzare
 
  posizione = InStr(1, conValuta, ",", 1) 'trovo la posizione della
virgola
  ndecimali = ((Len(CStr(conValuta))) - posizione) 'tot numero
decimali dopo la vergola
  decimali = Mid$(conValuta, posizione + 1, ndecimali) 'estrae i
decimali
  If Len(decimali) = 1 Then
    conValuta = conValuta + "0"
  End If
End Function

 Se qualcuno applica qualche correzione è la benvenuta.
Mi sa che se usavi Format$(curLire / 1936.27, "###,###,###0.00") facevi prima
:-)
Ciao
Nando
-- 
Posted from 
ppp-215-4.24-151.libero.it
 [151.24.4.215] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Nando
Dici?
Prova a covertire questo numero con la mia funzione e con la tua
veloce vele :-)
Lire: 1234567890123456789 con la mia = 637601104248610,38 (ed è
giusto)
Lire: 1234567890123456789 con la tua = Ti becchi un bel overflow :-)
Ti becchi l'overflow anche con molto meno 1234567890123456
Certo cifre del genere sono astronomiche, ma un computer deve poterlo
fare no ? :-)
Robin



Mi dispiace, nessun overflow:
Text1.Text = Format$("1234567890123456789", "#,##0.00")
Ciao

 Lire: 1234567890123456789 con la mia = 637601104248610,38 (ed č


> Lire: 1234567890123456789 con la mia = 637601104248610,38 (ed è


On Fri, 07 Dec 2001 19:17:09 GMT, 
bun...@libero.it
 (Giovanni De Rosa)
wrote:

E ce credo!!!!!!!
Trasformali in Euro così:
Text1.Text = Format$("1234567890123456789" /1936.27, "#,##0.00")
e ti becchi l'overflow!!!!! 
Robin

a me questa funzione ...
Text1.Text = Format$("123456789012345678912345678" / 1936.27, "#,##0.00")
ciao
L2K