Pagina 1 di 1

[VB6] Problemi a gestire le percentuali di numeri decimali

MessaggioInviato: lun mag 02, 2005 5:01 pm
da Zane
Ciao a tutti.

Ho un porblemino a calcolare il 20% di un numero decimale.

Ecco la mia funzione.

Codice: Seleziona tutto
Public Function Percentuale(ByVal valore As Variant, ByVal perc As Variant) As Variant
    MsgBox valore
    MsgBox perc
    Dim pippo As Double
    pippo = (valore * perc) / 100
    Percentuale = pippo
End Function


Chiamo questa funzione con

Codice: Seleziona tutto
percentuale(541.63,20)


Il cui risultato esatto dovrebbe essere 108.326. I msgbox mostrano correttametne i valori passati, ma la funzione mi ritorna un inspiegabile 10832,6

QUalche idea?

MessaggioInviato: lun mag 02, 2005 5:03 pm
da Zane
Ok, popolo di megalabbari, mentre scrivevo ho trovato la soluzione.

Il problema è che VB vuole la virgola come separatore delle decine, al contrario di SQL, che vuole il punto per funzionare correttamente (che bello stabilire una convenzione al di fuori delle abitudini dei singoli paesi ed usare sempre quella...)

E' bastato sostutire l'input della funzione percentuale con una chiamata di questo tipo

Codice: Seleziona tutto
percentuale(replace("541.63", ".", ","),20)


E tutto funzione correttamente!

MessaggioInviato: lun mag 02, 2005 11:32 pm
da Silver Black
Zane ha scritto:Il problema è che VB vuole la virgola come separatore delle decine, al contrario di SQL, che vuole il punto per funzionare correttamente (che bello stabilire una convenzione al di fuori delle abitudini dei singoli paesi ed usare sempre quella...)


Attento: VB non è che vuole la virgola, VB vuole il separatore decimale impostato nella "Impostazioni Internazionali" di Windows. Se adesso sostituisce il punto con la virgola come fai e porti il tuo programma su un PC settato con il metodo anglosassone (in pratica come SQL), il tuo programma non funzionerà.

Quindi dovresti, per avere un programma perfetto: prima beccare il separatore decimale (per farlo esegui una banale operazioni sulle stringhe, per esempio fai 3 div 2, converti in stringa e becchi il 2° carattere da sinistra, sarà il separatore decimale impostato), dopodichè sostituire con quello il "." del valore di cui trovare la percentuale.

MessaggioInviato: mar mag 03, 2005 8:28 am
da Robby78
Vero, infatti mi ripropongo da tempo di installare S.O e ambiente di sviluppo, database e accidenti vari tutti in inglese.... non potete immaginare quanti problemi e perdite di tempo mi capitano con queste dannate impostazioni internazionali!!! (per non parlare dei formati delle date..... [acc] )

MessaggioInviato: mar mag 03, 2005 10:30 am
da Zane
Robby, il pacco è che io ho già so+vb inglese, ma le impostazioni di default vengono prese da "impostazioni internazionali" del so, che devo tenere x forza in ita.

Grazie Silver per la precisazione!