Numeri decimali sempre validi indipendentemente dalla culture del comp...

mercoledì 20 luglio 2016 - 16.56
Tag Elenco Tags  VB.NET  |  MySQL 5.5  |  Access (.mdb)  |  Chrome

ravalon Profilo | Expert

Salve a tutti ,

recentemente ho incontrato un problema su un mio applicativo winform che gira da anni su 12 postazioni circa...
In una nuova funzione, ho notato che una somma di 2 numeri decimali viene eseguita correttamente su alcuni pc, mentre su altri sballa totalmente come se interpretasse il separatore di decimali al posto del separatore delle migliaia e viceversa....
Ho pensato che questa potesse essere l'unica spiegazione al funzionamento alternato dipendente dalla postazioni, che pure hanno tutte impostate la lingua ITALIANA.

Ora.... io ottengo decimali separati dal punto anzichè dalla virgola perchè cosi sono già pronti per essere inseriti nei vari database su cui scrive la mia applicazione .... i quali invece non digeriscono i decimali con la virgola per cui ho pensato di usarli cosi e tutto funziona tranne per il fatto sopraesposto...

Ora vorrei chiedervi....c'è un modo per far funzionare l'interpretazione di questi maledetti decimali indipendentemente dalla culture del computer in modo che io ottenga sempre e comunque il mio numero come stringa con il puntino come separatore?

Credo di avere fatto un po casino con questa cosa....
Attualmente forzo la CULTURE su italiano all'avvio dell'applicazione...
....in seguito converto sempre i numeri di valute in numero a 2 decimali (con la formattazione breve N2) ed infine sostituisco la virgola con un puntino....

Ditemi voi quale è invece il miglior modo, magari universalmente valido, di procedere, considerato che i database che uso non vogliono la virgola (o almeno alcuni).

Intanto eccovi il codice che uso per fare il conto...che in debug funziona cosi come su molte postazioni...ma in alcune non va...

If txtSpesaTotale.Text = "" Then
txtSpesaTotale.Text = Strings.FormatCurrency((lstBoxQuantitaDaORdinare.Items(i)) * (CDec(strPrezzoAggiunto)))
Else
txtSpesaTotale.Text = Strings.FormatCurrency((CDec(txtSpesaTotale.Text)) + ((lstBoxQuantitaDaORdinare.Items(i)) * (CDec(strPrezzoAggiunto))))
End If

Grazie


************** AGGIORNAMENTO RISOLUTIVO *******************

Dopo giorni di test credo di avere risolto...

Le postazioni dove la somma andava in errore avevano nelle impostazioni internazionali dei numeri il punto come decimale e la virgola come separatore.... questo, unitamente al fatto che sommavo un valore formattato con FormatCurrency (tipo 384,99) con un decimale formattato a decimale (quindi 445.99), veniva fuori un casino...

Ho cambiato il codice facendo tutti i calcoli tra formattazioni identiche, passando quindi il valore ad una variabile dichiarata come DECIMAL, sommando le due cifre formattate come decimal con CDEC e solo alla fine formattando il valore finale con la FormatCurrency.
Cosi, il calcolo lo faccio sempre e comunque come decimale, e alla fine formatto in valuta...quindi anche per CULTURE diverse il risultato dovrebbe essere sempre assicurato e corretto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5