Separatore decimale

giovedì 22 luglio 2004 - 12.01

snap_ml Profilo | Newbie

Ho un sistema oparativo in italiano, e vorrei ottenere il separatore decimale che si trova nelle impostazioni internzaionali di windows.
Ho provato con System.Globalization.CultureInfo.CurrentUICulture.NumberFormat.CurrencyDecimalSeparator ma mi restituisce sempre la "," anche se io come separatore decimale nelle impostazioni ho il ";".
Come posso fare per ottenere il ";"?
Grazie

trinity Profilo | Guru

snap_ml, una dimanda ma il separatore a cosa ti serve?Ossia se lo imposti te?

snap_ml Profilo | Newbie

Non capisco la tua domanda :-(..
Voglio sapere il separatore decimale usato dal pc.
oppure mi stai dicendo che se uso il culture info posso fregarmene?

hydra Profilo | Junior Member

Spero di non cannare, cmq ti riciclo un utile consiglio sfornato da Brainkiller. Le impostazioni internazionali le trovi nel registro, in particolare quella che interessa a te si trova sotto questa chiave: "HKEY_USERS\\S-1-5-21-329068152-854245398-839522115-500\\Control Panel\\International." La chiave incriminata è la "sDecimal". Puoi leggere e scrivere questa chiave come vuoi, per farlo leggi questo tip: http://www.dotnethell.it/articles/article.aspx?ArticleID=75

Spero di esserti stato d'aiuto, così tu vai a leggere le impostazioni internazionali che imposti su pannello di controllo. Se però la tua necessità non è questa spiegami meglio il tuo problema.

Brainkiller Profilo | Guru

Ciao snap_ml,
più semplicemente prova a far così.
Modifica le impostazioni di globalization al thread corrente in questo modo:

Thread.CurrentThread.CurrentCulture=new System.Globalization.CultureInfo("it-IT");

e poi prova a stampare con un WriteLine il separatore decimale.
Vedrai che comparirà la virgola.

Console.WriteLine(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator.ToString());

Per usare la prima linea devi referenziare con using o Imports se usi VB.NET il namespace System.Threading.

ciao
david

snap_ml Profilo | Newbie

Ma questa soluzione praticamente mi fa impostare per il thread le impostazioni in italiano, ma non mi consente di leggere le impostazioni internazionali.Dovrei fare come dice hydra e leggere dal registro?Non si puo' fare la stessa cosa utilizzando il cultureinfo?

hydra Profilo | Junior Member

Indipendentemente dalla lingua che usi e dalle impostazioni che hai se tu leggi dal registro hai esattamente quello che il computer usa. Se tu imposti il ; come separatore, il sistema usa ; e nel registro trovi ;. quelle che ti ho suggerito sono le chiavi che va a scrivere il pannello di controllo quando modifichi le impostazioni. Non so se esista una classe del FK che ti permetta di fare questo (che sicuramente sarebbe molto più semplice), ma se operi sul registro ottieni l'effetto desiderato. Provare per credere.

snap_ml Profilo | Newbie

Ti ringrazio, sei stato molto esauriente.
Spero di trovare una classe del framework che sarebbe molto meglio...

Brainkiller Profilo | Guru

Veramente la prima cosa che mi era balzata all'occhio era questa:

CultureInfo.InstalledUICulture

Cioè InstalledUICulture dovrebbe dirti appunto i parametri della cultura installata con il sistema operativo.
Praticamente come la vecchia API http://msdn.microsoft.com/library/en-us/intl/nls_2ip1.asp
Io l'ho provata ma c'era qualcosa che non mi quadrava forse perchè sono andato troppo veloce.

Prova ad usarla tu.
Le classi da usare sono queste non ce ne sono altre e dovrebbero fornirti tutte le info.
L'accesso a registro in questo caso mi sembra eccessivo anche perchè cambiando piattaforma (andando per esempio su 98) le chiavi non sono le stesse mentre le classi del Framework si.

ciao
david

hydra Profilo | Junior Member

Rispondo a un vecchio messaggio perchè ho un problema al riguardo. Siccome Brainkiller mi ha convinto a usare la CultureInfo per impostare i valori (io nella mia applicazione ho bisogno di avere dei parametri settati come voglio io :) ), ho provato a implementare una funzioncina per cambiare questi parametri. Solo che non mi cambia proprio niente. Posto il codice che utilizzo per modificare i valori:

Dim Cult As New CultureInfo("en-US", False)

Cult.NumberFormat.CurrencyDecimalSeparator = "."
Cult.NumberFormat.CurrencyGroupSeparator = ","

la stringa "en-US" l'ho trovata nella guida, in teoria qua dovrei inserire la lingua corrente giusto? Ma come faccio a recuperarla? E poi come faccio di conseguenza ad impostare i valori che mi interessano? Grazie a tutti quelli che vorranno rispondermi. ;)
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5