Press "Enter" to skip to content

Trasformare un numero decimale in stringa nel formato standard americano, ovvero con il separatore decimale valido per i parser C#

Per disgrazia di noi poveri programmatori, nell’era della globalizzazione nessuno ha pensato di standardizzare il formato con cui sono scritti i numeri e le date in formato stringa.

Pertanto in Italia separiamo i decimali con la virgola e le migliaia con i punti, negli Stati Uniti hanno la convenzione contraria, in Svezia mi dicono che il separatore delle migliaia è uno spazio, quindi quando si tratta di numeri e stringhe e di programmi che devono fare un parse, va sempre a finire che aumentiamo i nostri crediti per finire all’inferno.

Oggi sto lavorando ancora all’interoperabilità con Excel e così come nel precedente post sul formato delle funzioni di excel, mi sono trovata il solito errore di formula scrivendo la seguente formula in una cella:

range[1,1] = string.Format( "={0}*{1}", cellName, totalizer);

il risultato dello string.Format era il seguente:

"=$A$1*1234567,890"

In questo caso l’errore è ovvio, visto che le Interop assumono che le formule siano scritte sempre in Inglese, la virgola del separatore decimale italiano non è accettabile dal parser delle interop.

Non posso biasimare i programmatori che hanno scritto le Interop per la scelta, la quantità di codice da scrivere per essere certi che tutto funzioni sarebbe probabilmente ingestibile.

Fortunatamente il framework ci viene incontro permettendoci di gestire correttamente il ToString del numero in versione Inglese/Americana.

Lo annoto in modo che alla prossima non me lo dimentico:

string formula =string.Format("={0}*{1}", cellName,totalizer.ToString("f",System.Globalization.CultureInfo.InvariantCulture));