将请求QueryString转换为Decimal

bar*_*ros 3 c# asp.net string decimal

我无法将查询字符串转换为十进制.在这个例子中,当我控制Request.QueryString["Amount"]值时,它是32.52在下面的代码工作之后,这样的Amount值是3252M.我怎么能轻松做到这一点?

decimal Amount= 0;
if (Request.QueryString["Amount"] != null)
     Amount = Convert.ToDecimal(Request.QueryString["Amount"]);
Run Code Online (Sandbox Code Playgroud)

Son*_*nül 5

Convert.ToDecimal默认情况下使用您当前的文化设置.

强烈怀疑你CurrentCultureNumberDecimalSeparator财产不是.,但NumberGroupSeparator财产.

这就是为什么你的程序认为这是千位分隔符,而不是小数分隔符,它解析为a 3252,而不是32.52.

作为解决方案,您可以使用其中有一个文化.NumberDecimalSeparatorInvariantCulture,或者你可以.Clone你当前的文化,并设置它NumberDecimalSeparator. 1

Amount = Convert.ToDecimal(Request.QueryString["Amount"], CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

要么

var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = ",";
Amount = Convert.ToDecimal("32.52", culture);
Run Code Online (Sandbox Code Playgroud)

1:如果您当前的文化千位分隔符.尚未存在.否则,您还需要更改它.对于任何文化,这两个属性都不能具有相同的值