Java中强转公式:
case 1:由小值域到大值域:
这个最简单,整型由小到大就不可能超限(超出值域范围);
例子如下:
public class yanshi{
public static void main(String[] args){
byte byteValue=127;
int intValue=0;
intValue = byteValue;//直接赋值转换
}
}
为了方遍以下我直接写函数体,就是body部分
case 2:隐式转换
条件:任一浮点数,例如1.1
BODY体
float floatValue = 1.1;//这是错误的
原因:因为1.1是属于double型的浮点数,所以不能直接赋值,这里涉及到的是隐式转换
应该改为:
float floatValue=1.1f;//这里的f告诉了编译器这是float数,而不是默认的double
case 3:浮点数由小值域到大值域
BODY体
float floatValue=1.1f;
double doubleValue=0;
doubleValue=floatValue;//这是错误的
原因:因为在计算机中浮点数是不确定的,等于是一个随机数,只能是近似的和目标值相近,这里的body体不能达到无损转换,如要了解详情可以看一下数据储存原理,这里可以稍微提一下:转换为二进制时会有精度丢失,再转换为十进制同样会有精度丢失,毕竟计算机只能按照0,1储存
应该改为:
float floatValue = 1.1f;
BigDecimal zhuanhuan = new BigDecimal(String.valueOf(floatValue));//java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算(引用于百度百科),在这里我们把floatValue先变成一个字符串进行保存计算,并对zhuanhuan实例化
double doubleValue= zhuanhuan .doubleValue();
或者
float floatValue = 1.2f;
double doubleValue = Double.parseDouble(String.valueOf(floatValue)) ;
//用了parse函数,转换为字符串再转回来
case 4:整型数由大值域转换成小值域
BODY体
int intValue = 1;
long longValue=2;
intValue=(int)longValue;//这一步是转换
整数型大值域转换成小值域的格式是:
目标格式变量=(目标格式)转换变量;
case5:浮点数由大值域转换成小值域
BODY体
double doubleValue = 1.1;
float doubleValue = Float.parseFloat(String.valueOf(doubleValue)) ;
同理;
原因:有人或许会奇怪公式都一样,哪里有强转,但实际上仔细研究下列公式可以发现原因
公式:
目标值+强转变量=目标值大写关键字.parse目标值大写关键字(String.valueOf(强转目标);
我们可以看见,Java先将其变为了一个数字形式的String的字符串,然后再转变回来