前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java.math.biginteger cannot be cast_java the selection cannot be

java.math.biginteger cannot be cast_java the selection cannot be

作者头像
Java架构师必看
发布2022-09-12 14:46:46
8340
发布2022-09-12 14:46:46
举报
文章被收录于专栏:Java架构师必看

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说java.math.biginteger cannot be cast_java the selection cannot be,希望能够帮助大家进步!!!

出现这个错误的原因是将数据库中数值型取出保存到 map<String,Object>中,需要进行数值运算,转成double类型时抛出ava.math.BigDecimal cannot be cast to java.lang.Double。

解决办法;

1.转成string

代码语言:javascript
复制
String num_str=map.get("key").toString();

只听到从架构师办公室传来架构君的声音:

清溪奔快,不管青山碍。有谁来对上联或下联?

2.转成double,需承接上面的转成String

代码语言:javascript
复制
此代码由Java架构师必看网-架构君整理
Double num_double=Double.parseDouble(num_str)

从数据库取count、sum等函数的值需要转化成Integer的时候出现

java.math.BigDecimal cannot be cast to java.lang.String的报错

错误代码

//code

代码语言:javascript
复制
int num = (int)map.get(key);

解决方法

代码语言:javascript
复制
此代码由Java架构师必看网-架构君整理
int num = Integer.parseInt(String.valueOf(map1.get(key)))

数字类型的String字符串转换为浮点数通常采用parseDouble()和valueOf()方法,两者主要是存在以下两点区别。

区别一:参数区别

代码语言:javascript
复制
Double.parseDouble(java.lang.String)的参数只能是String,如果参数改为double类型提示“The method parseDouble(String) in the type Double is not applicable for the arguments (double)”错误。
Double.valueOf()的参数类型可以是浮点型或者是字符串均可。

String pi = "3.1415926";
double floatOrDouble = 3.1415926;
double parseDouble = Double.parseDouble(pi);
//提示错误 Change type of"floatOrDoubleP" to "String"
//double floatOrDoubleP = Double.parseDouble(floatOrDouble);
System.out.println(parseDouble);
//System.out.println(floatOrDoubleP);
Double valueOf = Double.valueOf(pi);
Double floatOrDoubleV = Double.valueOf(floatOrDouble);
System.out.println(valueOf);
System.out.println(floatOrDoubleV);

控制台输出结果:

3.1415926

3.1415926

3.1415926

区别二:返回类型

代码语言:javascript
复制
Double.parseDouble(java.lang.String)把数字类型的字符串转换成double类型
Double.valueOf()方把数字类型的字符串转换成Double类型
Double.parseDouble()方法的源码:
public static double parseDouble(String s) throws NumberFormatException { 
   
        return FloatingDecimal.readJavaFormatString(s).doubleValue();
}
Double.valueOf()方法的源码:
public static Double valueOf(String s) throws NumberFormatException { 
   
	// new Double()
        return new Double(FloatingDecimal.readJavaFormatString(s).doubleValue());
}

通过格式化小数点位数两者结果相同,可以看出除参数和返回类型外两者区别不大。

代码语言:javascript
复制
DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(Double.parseDouble(pi)));
System.out.println(df.format(Double.valueOf(pi)));

控制台输出结果:

3.14

3.14

Integer工具类也是很相似的,但是Integer的valueOf内部实现的时候会有一些不同。

Integer.valueOf()方法的源码:

代码语言:javascript
复制
public static Integer valueOf(int i) { 
   
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-062,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档