Scala数值类型自动转换、强制转换、数值类型和String 类型间转换

目录

数值类型自动转换

数值类型强制转换

数值类型和String 类型间转换


数值类型自动转换

        当 Scala 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:

 说明

  1. 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
  2. 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
  3. byte,short)和 char 之间不会相互自动转换。
  4. byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型
package com.mingyu.spark.core.test

object TestTransform {
	
	def main(args: Array[String]): Unit = {
		
		// 自动类型转换
		var t1: Int = 290
		
		// 1 大转小会报错
		//var t2:Byte = t1  // error
		
		// 2 小转大会转化为大的进行计算
		var t3: Double = 1.0
		t3 = t1
		println(t3.getClass.getSimpleName) // double
		
		// 3 (Byte,Short)和 Char 之间不会相互自动转换
		var t4: Byte = 1
		var t5: Char = 1
		var t6: Short = 32
		
		
		//t5 = t4  // error
		//t6 = t5  // type mismatch
		
		
		// 4  byte,short,char 他们三者可以计算,在计算时首先转换为 int
		//类型。
		//t6 = t4 + t5  // (t4 + t5)结果是Int,大转小报错
		//var t7:Short = 1+1  //大转小 报错
	}
	
}

数值类型强制转换

        自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意

 

Java	:	int num = (int)2.5
Scala :	var num : Int = 2.7.toInt

 

  1. 将数据由高精度转换为低精度,就需要使用到强制转换
  2. 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

 

object TestForceTransfer {

    def main(args: Array[String]): Unit = {

        //(1)将数据由高精度转换为低精度,就需要使用到强制转换
        var n1: Int = 2.5.toInt // 这个存在精度损失

        //(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
        var r1: Int = 10 * 3.5.toInt + 6 * 1.5.toInt	// 10 *3 + 6*1= 36
        var r2: Int = (10 * 3.5 + 6 * 1.5).toInt	// 44.0.toInt =44
    println("r1=" + r1 + " r2=" + r2)
    }
}

数值类型和String 类型间转换

        在程序开发中,我们经常需要将基本数值类型转成 String 类型。或者将 String 类型转成基本数值类型。

  1. 基本类型转 String 类型(语法:将基本类型的值+"" 即可)
  2. String 类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、

s1.toLong、s1.toShort)

package com.mingyu.spark.core.test

object TestTransform2 {
	def main(args: Array[String]): Unit = {
		
		// 数值类型和String 类型间转换
		
		// 1、String转数值类型
		var i1: Int = "1".toInt
		var f1: Float = "2.3".toFloat
		println(f1.getClass.getSimpleName) // float
		
		// 当小数类型字符串转为Int时,会报错
		//var i2: Int = "9.9".toInt // NumberFormatException
		
		// 精度损失
		var f2: Float = "1.111222333444".toFloat
		var d1: Double = "1.111222333444555666777888999".toDouble
		println(f2) // 1.1112224
		println(d1) // 1.1112223334445557
		
		// 2、Int,float,...转String
		var s1: String = 1.2.toString
		var s2: String = 1 + ""
		println(s1.getClass.getSimpleName) // String
		println(s2.getClass.getSimpleName) // String
	}
	
}

Int转Byte,注意溢出问题

		// n: 00000000 00000000 00000000 10000010
		// Byte范围是-128~127
		var n: Int = 130
		var b: Byte = 1
		
		b = n.toByte // 溢出2
		println(b) // -126

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值