将请求QueryString转换为Decimal

时间:2015-01-21 14:07:46

标签: 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"]);

2 个答案:

答案 0 :(得分:5)

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

强烈怀疑您CurrentCultureNumberDecimalSeparator property不是.,但NumberGroupSeparator property.

这就是为什么你的程序认为这是一个千位分隔符,而不是十进制分隔符,它解析为3252,而不是32.52.

作为一种解决方案,您可以使用.作为NumberDecimalSeparator作为InvariantCulture的文化,或者.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:如果您当前文化的千位分隔符不是.。否则,您还需要更改它。两个属性的任何文化都不能具有相同的值

答案 1 :(得分:0)

我认为您在上一个答案中所述的文化存在问题。您可能想尝试使用不同的文化:

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

然后我会尝试:

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