我无法将查询字符串转换为十进制。
在此示例中,当我控制Request.QueryString["Amount"]
值时,它是32.52
在以下代码工作之后,Amount
值为3252M。我怎么能轻易做到这一点?
decimal Amount= 0;
if (Request.QueryString["Amount"] != null)
Amount = Convert.ToDecimal(Request.QueryString["Amount"]);
答案 0 :(得分:5)
Convert.ToDecimal
默认使用您当前的文化设置 。
我强烈怀疑您CurrentCulture
的NumberDecimalSeparator
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);