我需要在SQL server中存储多种货币。我知道SQL不支持所有不同类型的货币(除非我将其存储为字符串,但我不想这样做。)
我的想法是将所有值从其货币格式转换为标准双倍并存储它。然后在显示时根据文化信息重新格式化。但是,我尝试过做类似的事情。
var cultureInfo = new System.Globalization.CultureInfo("en-US");
double plain = return Double.Parse("$20,000.00", cultureInfo);
这似乎永远不会起作用它始终抛出FormatException
。即使删除货币符号,只是尝试根据数字单独执行此操作也会做同样的事情。这只是一个例子,我想支持几乎任何类型的货币。
是否有一种标准的方式来剥离货币并将价值变为双倍?
答案 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