前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >String转为long 类型报错原因:要转为long必须是int、double、float型[通俗易懂]

String转为long 类型报错原因:要转为long必须是int、double、float型[通俗易懂]

作者头像
全栈程序员站长
发布2022-07-28 13:21:35
2.3K0
发布2022-07-28 13:21:35
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

遇到该问题的解决办法一:

代码语言:javascript
复制
String strTime = "12.5416132";
double dblTime = Double.parseDouble(strTime);
		
long lngTime = new Double(dblTime).longValue();
log.info("lngTime:"+lngTime);

具体报错原因请看下面的例子和解释:

上例子:

代码语言:javascript
复制
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的最大值或最小值,

原因解释:

代码语言:javascript
复制
问题一: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)

例子和解释来源于点击打开链接

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128601.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档