string a =100.1;
long b=long.parse(a);
转换时报 “输入字符串的格式不正确”
当a =100.0 时
long b=long.parse(a,NumberStyles.AllowDecimalPoint);
可以正常转换,
而 a=100.9 时
long b=long.parse(a,NumberStyles.AllowDecimalPoint);
转换失败,报超过Int64的最大值或最小值,
请大牛帮忙解释下,谢谢
问题一:long是整形也就是Int64类型,parse的对象必须是整形
问题二:
当a =100.0 时
long b=long.parse(a,NumberStyles.AllowDecimalPoint);
这是因为用了NumberStyles.AllowDecimalPoint
指示数字字符串可以具有小数点。 如果 NumberStyles 值包括 AllowCurrencySymbol 标志,分析的字符串包括货币符号,则小数分隔符字符由 NumberFormatInfo. CurrencyDecimalSeparator 属性确定。否则,小数分隔符由 NumberFormatInfo. NumberDecimalSeparator 属性来确定。
实际上是允许有小数点的出现,但作为long,还是不能parse非整数,此时的a是100.00,是可以丢去小数点作为整数的。也就是说long在parse的时候是默认把a处理后当成100来parse的。
问题三:
此时的a变成100.1,同样使用了NumberStyles.AllowDecimalPoint,但这时候long所parse的不再是一个整数,所以会提出异常,超过int64也就是long的范围,对于这个错误,可以先把a=100.1做一个转换变成整形,或者使用范围更广的double或decimal来parse,如decimal.Parse("100.1", NumberStyles.AllowDecimalPoint)
明白了,谢谢
long是长整数。 100.1是带小数的浮点数, 直接转整数当然会转换错误, 你可以转成Double的 Double.Parse。 然后降低精度把Double取整 得到long。
当a=100.0 时,为什么使用long b=long.parse(a,NumberStyles.AllowDecimalPoint);
这句不报错呢?
Convert.ToInt64
long b = (int)Convert.ToDecimal(a);用这个试试!