Tatsächlich habe ich mehrere Systeme, die numerische Daten generieren können, und sie sind auf einigen Webservern in Textdateien gespeichert. Einige Systeme verwenden den Dezimalpunkt als Trennzeichen für Trennzeichen. Einige Systeme verwenden Dezimalzeichen als das gleiche Trennzeichen.Überregionales Dezimal-/Doppelparsing
Anwendungen (Fat Client, .net 2.0) können auch auf beiden Arten von Systemen ausgeführt werden.
Nach einiger Stolper ich dies tat: (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));
}
Würden Sie eine bessere, elegantere Art und Weise?
EDIT:
Es tut mir leid für die, bevor es nicht zu erwähnen, und da Ihre Antworten mager in dieser Richtung - ich nicht speichern kann, mit den Zahlen Kultur zu erzeugen, kann ich nur versuchen, zu ‚erkennen‘ es.
Mit 'CultureInfo'? – Leri
Können Sie die generierende Kultur mit dem Zahlenstring speichern? Dies würde jegliche Notwendigkeit für ein solches Fadenbiegen verringern. – SWeko
Wissen Sie ungefähr, wie die generierten Zahlen sein werden? zB bis zu einer Reihe von Optionen? Ich bin mir nicht sicher, wie Ihr System mit "1000.12" umgehen würde (eigentlich weiß ich, es würde brechen). Wenn Sie nur eine begrenzte Anzahl von möglichen Formaten haben, können Sie sie einfach ausprobieren, wenn sie keine Ambiguität haben. – Chris