首页 新闻 会员 周边 捐助

string 变量 使用long.parse() 方法转换为long 类型报错

0
悬赏园豆:20 [已解决问题] 解决于 2013-05-30 09:38

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的最大值或最小值,

请大牛帮忙解释下,谢谢

ClrsDream的主页 ClrsDream | 菜鸟二级 | 园豆:386
提问于:2013-05-30 00:26
< >
分享
最佳答案
0

问题一: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)

收获园豆:20
WuRang | 小虾三级 |园豆:1730 | 2013-05-30 09:29

明白了,谢谢

ClrsDream | 园豆:386 (菜鸟二级) | 2013-05-30 09:37
其他回答(3)
0

long是长整数。 100.1是带小数的浮点数, 直接转整数当然会转换错误, 你可以转成Double的  Double.Parse。 然后降低精度把Double取整 得到long。

gunsmoke | 园豆:3592 (老鸟四级) | 2013-05-30 07:23

当a=100.0 时,为什么使用long b=long.parse(a,NumberStyles.AllowDecimalPoint);

这句不报错呢?

支持(0) 反对(0) ClrsDream | 园豆:386 (菜鸟二级) | 2013-05-30 08:51
0

Convert.ToInt64

悟了 | 园豆:521 (小虾三级) | 2013-05-30 07:46
0

 long b = (int)Convert.ToDecimal(a);用这个试试!

休小晓 | 园豆:21 (初学一级) | 2013-05-30 09:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册