将任何货币字符串转换为double

时间:2010-05-02 14:08:24

标签: c# currency cultureinfo

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

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

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

这似乎永远不会起作用它始终抛出FormatException。即使删除货币符号,只是尝试根据数字单独执行此操作也会做同样的事情。这只是一个例子,我想支持几乎任何类型的货币。

是否有一种标准的方式来剥离货币并将价值变为双倍?

3 个答案:

答案 0 :(得分:94)

我认为这应该有效:

double.Parse(currencyValue, NumberStyles.Currency);

您可以在此处详细了解NumberStyles

编辑:如果有人在没有查看其他答案/评论的情况下看到这个答案,这个答案回答了所写的问题,但将货币存储为double并不是一个好主意,而且最好是请改用decimal

答案 1 :(得分:20)

您应该将NumberStyles传递给Parse函数

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

其他一些东西,对于货币,我建议你使用Decimal。这可能会有所不同,但最好将货币数据存储为数据库中的货币,并添加货币代码以识别价值的货币。

是的,答案建议使用NumberStyles.Currency会更好。如果您仍然认为要使用字符串,那么这是一个预先定义的值。

答案 2 :(得分:0)

您也可以使用tryparse()

column B