c# - 将请求 QueryString 转换为十进制

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

最佳答案

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: 如果您当前文化的千位分隔符不是.。否则,您也需要更改它。对于任何文化,这两个属性都不能具有相同的值

关于c# - 将请求 QueryString 转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069211/

相关文章:

c# - 如何获取作为另一个元素后代的多个 XML 元素

c# - C# Windows 应用程序中的打印问题 - 始终打印到默认打印机

ASP.NET 中的 JQuery 日期选择器

arrays - 使用 NSSet 构造可用的 Swift 数组时遇到问题

javascript - 如何使用 JavaScript 将 ASCII 数字数组转换回其 char 值?

c# Win Form - CLR 无法从 COM 上下文转换

c# - 如何不继续取消的任务?

asp.net - 如何拦截来自WCF客户端的原始 SOAP 请求/响应(数据)

asp.net - 在 aspx 中有条件地设置 HTML5 占位符属性

java - 需要将字符串资源转换为 View 页面中的字符串