C# c语言中字符串到小数的转换#

C# c语言中字符串到小数的转换#,c#,asp.net,visual-studio-2010,decimal,C#,Asp.net,Visual Studio 2010,Decimal,我在使用decimal.parse将字符串转换为十进制值时遇到一些问题。 这是我的代码行: fixPrice = decimal.Parse(mItemParts.Groups["price"].Value.Replace("$", "").Replace(" ", "").Replace("usd", "")); 我试图转换的值为:“$779.99” 然后,一旦解析到十进制,我就得到这个值:77999 我想要779.99而不是77999。 提前谢谢你,拉齐尔 正则表达式包括:“@”

我在使用decimal.parse将字符串转换为十进制值时遇到一些问题。 这是我的代码行:

fixPrice = decimal.Parse(mItemParts.Groups["price"].Value.Replace("$", "").Replace(" ", "").Replace("usd", ""));     
我试图转换的值为:“$779.99”

然后,一旦解析到十进制,我就得到这个值:77999

我想要779.99而不是77999。 提前谢谢你,拉齐尔


正则表达式包括:“@”\[^\”“]+?)\[^~+?\]+?src=\”“(?[^\”“]+?)\[^>]+?title=\”“(?[^\”“]+?)\[^]+?price\>(?[^\传递您正在解析的区域性的
CultureInfo
实例

CultureInfo
继承自
IFormatProvider

编辑:

下面是一个转换示例

Decimal.Parse(yourValue, NumberStyles.AllowCurrencySymbol |
                         NumberStyles.AllowDecimalPoint   |
                         NumberStyles.AllowThousands,
              CultureInfo.InvariantCulture);

您似乎是在一个区域性中运行此操作,
是组分隔符,
,“
是十进制分隔符。若要解决此问题,请使用接受CultureInfo的解析重载:

fixPrice = decimal.Parse(stringExpression, CultureInfo.InvariantCulture);
此外,还可以查看货币符号,这样您就不必自己担心货币符号了:

fixPrice = decimal.Parse(stringExpression, NumberStyles.Currency, new CultureInfo("en-US"));
我将使用:

这对我很有用:

string decStr = "$779.99";
CultureInfo ci = new CultureInfo("en-US");
decimal fixPrice = decimal.Parse(decStr, NumberStyles.Currency, ci);

看起来您正在使用正则表达式来获取价格,您使用的表达式是什么?@CraigW Regex包括在内。我从Regex获得的最终产品是$779.99。该值显然是货币值;十进制是更合适的类型。如果经常有超过5位的值需要解析。@odyodyodys decimal具有比double更高的精度。
CurrentCulture
可能不是最佳选择。您应该检查TryParse的bool返回值,以查看解析是否成功。@评论员,有时我认为我可以偷偷输入一个快速而肮脏的示例作为答案,然后我记得这是这样的:)。我已更新了我的答案以反映您的建议。但这对OP没有帮助,OP(1)知道输入字符串有效,以及(2)有一个成功的解析返回了一个不正确的值。@JamesHill:不用担心,你仍然得到了我的投票:)。如果我能再挑剔一次,你的评论是错误的:)这样就确保了字符串格式总是正确的。
TryParse
?@PankajGarg当然,如果OP不确定,最好是
TryParse
输入是否有效。根据LINQPad,这些示例都不起作用-
FormatException-输入字符串的格式不正确
@JamesHill第一个示例应该与“779.99”一起使用(如OP的示例中所示),而对我来说,它确实起作用。我已更正了第二个示例(InvariantCulture不使用“$”作为货币符号);感谢您指出错误。
string decStr = "$779.99";
CultureInfo ci = new CultureInfo("en-US");
decimal fixPrice = decimal.Parse(decStr, NumberStyles.Currency, ci);