目录
一、强制类型转换
1、基本说明
自动类型转换的逆过程,将精度大的数值转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外注意。
2、案例实操
(1)将数据由高精度转换为低精度,就需要使用到强制转换。
(2)强制符号只针对于最近的操作数有效,往往会使用小括号提升优先级。
package chapter02
object Test_08DataTypeConversion {
def main(args: Array[String]): Unit = {
//二、强制数值类型转换
// (1)将数据由高精度转换为低精度,就需要使用到强制转换
val n1:Int = -2.9.toInt
println("n1:"+n1)
// (2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
val n2:Int = -2.9.toInt + -3.6.toInt
println("n2:"+n2)
val n3:Int = (-2.9 + -3.6).toInt
println(n3)
}
}
二、数值类型和String类型间转换
1、基本说明
在程序开发中,我们经常需要将基本数值类型转换成String类型。或者将String类型转成基本数值类型。
2、案例实操
(1)基本类型转String类型(语法:将基本类型的值+ " " 即可)
(2)String类型转基本数值类型(语法:sl.toInt , sl.toFloat , sl.toDouble , sl.toByten , sl.toLong , sl.toShort )
package chapter02
object Test_08DataTypeConversion {
def main(args: Array[String]): Unit = {
//三、数值类型和String类型的转换
//(1)数值转String
val n4:Int =37
val n5:String = n4 + ""
println(n5)
//(2)String转换数值
val n:Int = "423".toInt
val k:Float = "12.3".toFloat
val h:Int = "12.3".toFloat.toInt
println(n)
println(k)
println(h)
val k2:Int = (n + k +h).toInt
println(k2)
}
}
(3)注意事项
在将String类型转成基本数值类型时,要确保String类型能够转成有效的数据,比如我们可以把“123” ,转成一个整数,但是不能把“Hello”转成一个整数。
var n5:Int = "12.6" .toInt 会出现 NumberFormatException异常
三、扩展面试题
面试题总结:涉及到强制类型转换的精度缺失和数据溢出的问题
package chapter02
/**
* 128:Int类型,占据4个字节,32位
* 原码 0000 0000 0000 0000 0000 0000 1000 0000
* 补码 0000 0000 0000 0000 0000 0000 1000 0000
*
* 截取最后一个字节,Byte
* 得到补码:1000 0000
* 表示得到最大的负数是 -128
*
* 130:Int类型,占据4个字节,32位
* 原码 0000 0000 0000 0000 0000 0000 1000 0010
* 补码 0000 0000 0000 0000 0000 0000 1000 0010
*
* 截取最后一个字节,Byte
* 得到补码:1000 0010
* 对应原码:1111 1110
* 表示得到最大的负数是 -126
*/
object Test09 {
def main(args: Array[String]): Unit = {
var n:Int = 130
var b:Byte =n.toByte //范围-128——127
println(b)
}
}