将请求 QueryString 转换为十进制

Converting Request QueryString to Decimal

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

decimal Amount= 0;
if (Request.QueryString["Amount"] != null)
     Amount = Convert.ToDecimal(Request.QueryString["Amount"]);

Convert.ToDecimal 默认使用您当前的区域性设置

强烈怀疑你的CurrentCulture's NumberDecimalSeparator property is not ., but NumberGroupSeparator property.

这就是为什么您的程序认为这是一个千位分隔符,而不是小数点分隔符,并且它被解析为 3252,而不是 32.52.

作为解决方案,您可以使用 . 作为 NumberDecimalSeparator 的文化,例如 InvariantCulture, or you can .Clone 您当前的文化,并将其 NumberDecimalSeparator 设置为 . 1

Amount = Convert.ToDecimal(Request.QueryString["Amount"], CultureInfo.InvariantCulture);

var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = ",";
Amount = Convert.ToDecimal("32.52", culture);

1: 如果您当前文化的千位分隔符还没有 .。否则,您也需要更改它。对于任何文化

,两者 属性 不能具有相同的值

我认为您对上一个回答中所述的文化有疑问。您可能想尝试使用不同的文化:

RetVal = decimal.Parse(Request.QueryString["Amount"], CultureInfo.CurrentCulture);

那我试试:

RetVal = decimal.Parse(Request.QueryString["Amount"], CultureInfo.InvariantCulture);