42

我需要在 SQL Server 中存储多种货币。我知道 SQL 不会支持所有不同类型的货币(除非我将它存储为字符串,但我不想这样做)。

我的想法是将所有值从其货币格式转换为标准双精度并存储它。然后在显示时根据文化信息重新格式化。但是,我尝试过做类似的事情

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

这似乎从来没有工作它总是抛出一个FormatException. 即使删除货币符号并仅根据数字尝试执行此操作,也会做同样的事情。这只是一个例子,我想支持几乎任何类型的货币。

有没有一种标准的方法来剥离货币并获得双倍的价值?

4

3 回答 3

106

我认为这应该有效:

double.Parse(currencyValue, NumberStyles.Currency);

在这里,您可以看到有关NumberStyles的更多信息。

编辑:如果有人看到这个答案而不看其他答案/评论,这个答案回答了书面的问题,但是将货币存储为 adouble不是一个好主意,最好使用小数

于 2010-05-02T14:13:07.860 回答
23

您应该将 NumberStyles 传递给 Parse 函数

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

其他一些事情,对于货币,我建议你使用 Decimal。这可能还差得远,但最好将货币数据作为货币存储在数据库中,并添加货币代码来识别价值的货币。

是的,答案建议 NumberStyles.Currency 会更好。如果您仍然认为要使用字符串,它是一个 pre-Or'd 值。

于 2010-05-02T14:17:07.867 回答
1

您还可以使用 tryparse()

string input = "$2,000.00";
double parsed = 0d;
double.TryParse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.CurrentCulture, out parsed))
于 2019-01-29T16:49:00.943 回答