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

您所在的位置:网站首页 scala中_ Scala数值类型自动转换、强制转换、数值类型和String 类型间转换

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

2023-03-23 03:29| 来源: 网络整理| 查看: 265

目录

数值类型自动转换

数值类型强制转换

数值类型和String 类型间转换

数值类型自动转换

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

 说明

自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。byte,short)和 char 之间不会相互自动转换。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

 

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

 

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 类型转成基本数值类型。

基本类型转 String 类型(语法:将基本类型的值+"" 即可)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

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3