我对提交的表单信息有疑问。当我尝试解析通过Interner Explorer或Chrome返回但未在Firefox或Safari上返回的字符串时,十进制解析失败。字符串在Visual Studio中看起来完全相同。我做了这个调试位:
var asd3 = collection["formValue"]; // Get it from the FormCollection
var asd4 = asd3.Replace(",", "."); // Change the punctuation
var asd5 = Decimal.Parse(asd4); // Make the string into a decimal
var asd6 = Math.Round(asd5, 1); // Round it
尝试使用错误解析asd5
的小数时,asd4
失败:Input string was not in a correct format.
这是字符串的图像。 Top是Firefox,位于Internet Explorer之下。
这究竟是什么问题?
答案 0 :(得分:2)
这究竟是什么问题?
文化。
在调试器中检查Thread.CurrentThread.CurrentCulture
的值,您会发现浏览器之间存在差异。
如果您在浏览器中设置了不同的文化集,则在解析值时,ASP.NET将使用此文化,特别是如果您未在web.config中明确指定文化:
<globalization culture="en-US" uiCulture="en-US" />
如果设置为auto
,则将使用浏览器文化。
另一种可能性是在解析时强制使用不变文化,以确保.
(点)将是小数点分隔符。
var asd5 = Decimal.Parse(asd4, CultureInfo.InvariantCulture);