大家好,又见面了,我是你们的朋友全栈君。
遇到该问题的解决办法一:
String strTime = "12.5416132";
double dblTime = Double.parseDouble(strTime);
long lngTime = new Double(dblTime).longValue();
log.info("lngTime:"+lngTime);
具体报错原因请看下面的例子和解释:
上例子:
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)
例子和解释来源于点击打开链接
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128601.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...