webentwicklung-frage-antwort-db.com.de

Konvertieren Sie eine beliebige Währungszeichenfolge in einen Doppelklick

Ich muss mehrere Währungen in SQL Server speichern. Ich verstehe, dass SQL nicht alle verschiedenen Arten von Währungen unterstützt (es sei denn, ich speichere es als Zeichenkette, aber ich möchte das nicht).

Meine Idee war, alle Werte aus ihrem Währungsformat in ein Standard-Double umzuwandeln und dieses zu speichern. Dann formatieren Sie die Anzeige nach den Kulturinformationen. Ich habe jedoch versucht, so etwas wie z.

var cultureInfo = new System.Globalization.CultureInfo("en-US");
double plain = return Double.Parse("$20,000.00", cultureInfo);

Dies scheint nicht immer zu funktionieren, es wirft immer eine FormatException. Selbst das Entfernen des Währungssymbols und der Versuch, dies nur anhand der Zahl zu tun, bewirkt dasselbe. Dies ist nur ein Beispiel, das ich so ziemlich jeder Art von Währung unterstützen möchte. 

Gibt es eine Standardmethode, um die Währung zu streichen und den Wert doppelt zu erzielen?

36
James

Ich denke das sollte funktionieren:

double.Parse(currencyValue, NumberStyles.Currency);

Hier erfahren Sie mehr über die NumberStyles .

Edit: Falls jemand diese Antwort sieht, ohne sich die anderen Antworten/Kommentare anzusehen, hat diese Antwort die Frage als geschrieben beantwortet, aber das Speichern von Währung als double ist keine gute Idee, und es wäre besser, stattdessen decimal zu verwenden .

91
Hans Olsson

Sie sollten NumberStyles an die Parse-Funktion übergeben

Decimal.Parse("$20,000.00", NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, new CultureInfo("en-US"));

Ein paar andere Dinge, für Währungen würde ich vorschlagen, dass Sie Dezimal verwenden. Dies ist möglicherweise nicht in Ordnung, aber es ist möglicherweise besser, die Währungsdaten als Money in der Datenbank zu speichern und einen Währungscode hinzuzufügen, um die Währung des Werts zu bestimmen.

Ja, und die Antworten schlagen vor, dass NumberStyles.Currency besser wäre. Es ist ein Pre-Or'd-Wert, wenn Sie immer noch denken, dass Sie die Zeichenfolgen verwenden möchten.

19
Chris Taylor

Sie können auch die Tryparse () verwenden

string input = "$2,000.00";
double parsed = 0d;
double.TryParse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.CurrentCulture, out parsed))
0
hogarth45