E' noto che per formattare un numero in formato "currency" è possibile usare la formattazione predefinita "C": price.ToString("C"). Tale tipo di formattazione oltre che impostare la corretta formattazione per decimali e separatore per migliaia aggiunge alla stringa formattata anche il simbolo della currency della cultura impostata implicitamente o esplicitamente.
Se noi scriviamo:
decimal price = 10;
string s_it_IT = price.ToString("C", new CultureInfo("it-IT"));
string s_en_US = price.ToString("C", new CultureInfo("en-US"));
abbiamo come risultato che s_it_IT = "€ 10,00" e s_en_US = "$ 10.00".
La cosa è senza dubbio interessante, ma perchè la formattazione di un campo currency deve comportare anche il cambiamento del simbolo della moneta? Ma in realtà la domanda più corretta è: perchè la formattazione "currency" deve includere anche il simbolo della currency? Non è certo la cultura che determina il costo di un oggetto... ecco perchè preferisco scrivere:
string s_it_IT_dollaro = price.ToString("'$' #,##0.00", new CultureInfo("it-IT"));
string s_en_US_dollaro = price.ToString("'$' #,##0.00", new CultureInfo("en-US"));
... se voglio formattare in dollari '$' e:
string s_it_IT_euro = price.ToString("'€' #,##0.00", new CultureInfo("it-IT"));
string s_en_US_euro = price.ToString("'€' #,##0.00", new CultureInfo("en-US"));
... se voglio formattare in euro '€'. Perchè potrei voler vedere i dollari formattati all'italiana e viceversa.
Cablare il simbolo della moneta nel codice non è certo il massimo. Se l'applicazione ha omogeneità di tipo di moneta potremmo pensare che la moneta è un parametro di installazione e scegliere di portare il simbolo - ad esempio - nel ".config". Se l'applicazione ha eterogeneità di moneta dovremmo affiancare - come meglio criediamo - ogni prezzo al suo simbolo. Ma la soluzione al problema - che va valutato in base contesto applicativo - è cmq un'altra storia.
Ovviamente la polemica/considerazione vale anche per la formattazione del currency nel famoso/famigerato "Control Panel -> Regional Settings". Excel invece nella formattazione delle currency tiene divisi il concetto di symbol dal concetto del numero... come la logica vorrebbe che sia! :-p
posted @ domenica 17 dicembre 2006 21:06