将请求 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);
我无法将查询字符串转换为十进制。
在这个例子中,当我控制 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);