为什么Convert.ToInt32(“ 10.0”)失败

不仅在.NET中,即使在SQL Server 2005中这种转换也失败了...... 谁能告诉我为什么? 即使在情况下,也不要谨慎地返回整数部分
    Convert.ToInt32("10.2")
    
已邀请:
比失去一些意想不到的结果更好
10.0
10.2
不是整数。如果您知道要处理浮点数,请使用相应的数据类型:
float result = Convert.ToSingle("10.2", CultureInfo.InvariantCulture);
处理浮点数时也不要忘记考虑文化因为小数分隔符可能不总是
.
。     
其他人已经解释了为什么将“10.2”解析为10会是一个坏主意。现在让我们考虑“10.0”。 “10.0”是一个数字的字符串表示,可以有一个小数部分 - 换句话说,不是一个整数。 如果要将值解析为整数,则应该解析整数表示。 “10.0”几乎肯定只是一个整数......数据源显然不是整数的来源,所以你不应该将它们视为整数。 如果你想要最接近“实数”的整数,你应该将它解析为实数,然后根据需要进行舍入。 可以这样想:选择正确的解析形式表达了对输入格式的信念。目前的行为告诉你,你猜得很糟糕。     
因为10.2不是一个整数,程序员会明确地说明精度的损失会更好。 如果这样做并且不能抛出,则很可能会发生因错误的类型分配/转换而导致的意外丢失精度错误。     
Convert.ToInt32(“10.0”)只是调用Int32.Parse(“10.0”) 其中,等于Number.ParseInt32(“10.0”,NumberStyles.Integer,NumberFormatInfo.GetInstance(provider)); 这里最有趣的部分是NumberStyles.Integer值。这是一种复合数字样式,包括AllowLeadingWhite,AllowTrailingWhite和AllowLeadingSign样式。请注意,AllowDecimalPoint不包含在NumberStyles.Integer值中。所以,如果string包含小数点,我们就有格式异常。因为解析Int32不允许小数点。     

要回复问题请先登录注册