In effetti, dispongo di più sistemi in grado di generare dati numerici e sono memorizzati su alcuni server Web in file di testo. Alcuni dei sistemi usano il punto decimale come separatore di frazioni, alcuni dei sistemi usano come virgola decimale.Decimale incrociato/doppio parsing
Le applicazioni (fat client, .net 2.0) possono essere eseguite anche su entrambi i tipi di sistemi.
Così, dopo qualche inciampo ho fatto questo: (http://pastebin.com/vhLXABDD)
public static bool HasDecimalComma;
public static bool HasDecimalPeriod;
public static double GetNumber(string NumberString)
{
if (!HasDecimalComma && !HasDecimalPeriod)
{
string s = string.Format("{0:0.0}", 123.123);
if (s.Contains('.'))
{
HasDecimalPeriod = true;
}
else if (s.Contains(','))
{
HasDecimalComma = true;
}
else
{
throw new SystemException(string.Format("strange number format '{0}'", s));
}
}
if (HasDecimalComma)
{
return double.Parse(NumberString.Replace('.', ','));
}
if (HasDecimalPeriod)
{
return double.Parse(NumberString.Replace(',', '.'));
}
throw new ArgumentException(string.Format("can't parse '{0}'", NumberString));
}
suggerirebbe un modo migliore, più elegante?
EDIT:
Mi dispiace per non menzionare prima, e dal momento che le risposte magre in quella direzione - non riesco a memorizzare generare cultura con i numeri, posso solo cercare di 'rilevare' esso.
Usando 'CultureInfo'? – Leri
È possibile memorizzare la cultura di generazione con la stringa numerica? Ciò allevierebbe qualsiasi necessità di tale piegamento delle corde. – SWeko
Sai approssimativamente quali saranno i numeri generati? ad esempio fino ad un insieme di opzioni? Non sono sicuro di come il tuo sistema si occuperebbe di analizzare "1,000.12" (in realtà so che si romperà). Se disponi di un numero limitato di formati possibili, puoi provare ognuno di essi se non hanno possibilità di ambiguità. – Chris