当前位置: 首页 > 编程语言 > C#

数字分析怪谈分享

时间:2023-04-11 10:43:48 C#

数字分析怪谈这行代码:Console.WriteLine(Convert.ToInt32(“23,23”)+1);抛出异常。这行代码:Console.WriteLine(Convert.ToDouble("23,23")+1);打印2324。有谁知道为什么会这样?我认为第二次转换不会有任何好处。来自System.Double.Parse的MSDN文档:s参数可以包含以下形式的字符串:[ws][sign][integral-digits[,]]integral-digits[.[fractional-digits]][e[sign]exponential-digits][ws]此处,逗号(,)代表“[a]特定于文化的千位分隔符”。总结一下:如果当前区域性的千位分隔符符号出现在字符串中的任何位置,Double.Parse将忽略它(由Convert.ToDouble内部调用)。另一方面,Int32.Parse(string)不允许在字符串中使用千位分隔符:[ws][sign]digits[ws]这就是您的第一个示例抛出异常的原因。您可以使用允许您指定NumberStyles的重载来更改Double.Parse和Int32.Parse的这种行为,如其他答案中所述。第一个失败是因为int.Parse默认不允许千位分隔符。您可以使用NumberStyles更改它:intd=int.Parse("11,23",NumberStyles.AllowThousands,CultureInfo.InvariantCulture);现在它像double版本一样工作,默认支持千位分隔符。它们可能是成功的,因为“,”在被解析器视为千位分隔符时被完全忽略——尽管逗号有时作为千位分隔符没有意义。令人惊讶的是,即便如此:doubled=double.Parse("1,,1,2,3",CultureInfo.InvariantCulture);在上面,d被设置为值1123.0。Console.WriteLine(Convert.ToDouble("23,23")+1);在这种情况下,逗号被解释为本地化组分隔符并被忽略。请参阅http://msdn.microsoft.com/en-us/library/fd84bdyt.aspx。Console.WriteLine(Convert.ToInt32("23,23")+1);在这种情况下,您使用的是默认情况下不支持组分隔符的Int32.Parse。这背后的原因是整数转换器默认不支持本地化,因为本地化会增加额外的开销,并且没有理由将其添加到不需要与任何符号交互的解析器中。但是,您可以使用一些额外的参数强制解析器支持本地化:int.Parse("11,23",NumberStyles.AllowThousands,CultureInfo.InvariantCulture);另一方面,float/double转换必须支持小数分隔符。在某些文化中,这是“,”,而在其他文化中,它可以是“”或“.”。由于该功能必须支持本地化,默认情况下仅支持某些本地化功能没有意义。否则,由于小数点分隔符,实现会使那些期望本地化支持的人感到困惑,它还支持其他本地化方面。转换为double时忽略逗号。如果希望逗号产生错误,可以使用Double.Parse(string,System.Globalization.NumberStyles)方法。因为double假定逗号是千位分隔符并忽略它。Int32转换不会这样做。?double.Parse("23,23",System.Globalization.CultureInfo.InstalledUICulture);23.23?double.Parse("23,23",newSystem.Globalization.CultureInfo("en-US"));2323.0?double.Parse("23,23",newSystem.Globalization.CultureInfo("fr-FR"));23.23?double.Parse("23,23",System.Globalization.CultureInfo.InvariantCulture);2323.0forConvert.ToDouble,同理:以上就是《C#学习教程:数字分析与奇葩分享》的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——?Convert.ToDouble("23,23",System.Globalization.CultureInfo.InvariantCulture);2323.0本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢