将任何货币string转换为double
我需要在SQL服务器中存储多种货币。 我明白,SQL不会支持所有不同types的货币(除非我把它作为一个string存储,但我不想这样做)。
我的想法是将所有的价值从他们的货币格式转换为一个标准的双重存储,而不是。 然后在显示时根据文化信息重新格式化。 不过,我尝试做一些像例如
var cultureInfo = new System.Globalization.CultureInfo("en-US"); double plain = return Double.Parse("$20,000.00", cultureInfo);
这似乎没有工作,它总是抛出一个FormatException
。 即使删除货币符号,仅仅基于这个数字来做这件事也是一样的。 这只是我想要支持几乎任何types货币的一个例子。
有没有一个标准的方式来剥离货币,并获得双倍的价值?
我认为这应该工作:
double.Parse(currencyValue, NumberStyles.Currency);
在这里你可以看到关于NumberStyles的更多信息。
编辑:如果有人看到这个答案,而没有看其他答案/评论,这个答案回答了这个问题的书面,但货币作为一个double
存储不是一个好主意,它会更好地使用十进制 。
您应该将NumberStyles传递给parsing函数
Decimal.Parse("$20,000.00", NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, new CultureInfo("en-US"));
其他一些事情,对于货币我build议你使用十进制。 这可能还有一段路要走,但最好将货币数据作为货币存储在数据库中,并添加货币代码以识别货币的价值。
是的,答案build议NumberStyles.Currency会更好。 如果你仍然认为你想使用string,这是一个预先的Or价值。
除非我误解你的问题背后的意图
为什么不创build两个字段:
Amount MONEY CurrencyID INTEGER
这些logging看起来像:
(12.34,1),(10000000000000000,3)
CurrencyID是一个表中的外键,如下所示:
CurrencyID INTEGER PRIMARY KEY NOT NULL ISOSymbol NCHAR(3) NOT NULL DisplayName NVARCHAR(50)
例如(1,USD,美元),(2,CAD,加元),(3,ZWD,津巴布韦元)…
这是ISO 4217货币符号权威列表的链接