Scala学习(三)

news2024/11/29 4:39:29

2.8 浮点类型(Float、Double)

Scala的浮点类型可以表示一个小数,比如123.4f,7.8,0.12等等。
1)浮点型分类
数据类型 描述
Float [4] 32 位, IEEE 754标准的单精度浮点数
Double [8] 64 位 IEEE 754标准的双精度浮点数
2)案例实操
Scala的浮点型常量默认为Double型,声明Float型常量,须后加‘f’或‘F’。

object Test03_Type{

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

    // 浮点数介绍
    // 默认使用double
    val d: Double = 3.14

    // 如果使用float 在末尾添加f
    val fl = 3.14f

    // 浮点数计算有误差
    println(0.1 / 3.3)
    }
}

//运行的结果

0.030303030303030307

2.9 字符类型(Char)

1)基本说明
字符类型可以表示单个字符,字符类型是Char。
2)案例实操
(1)字符常量是用单引号 ’ ’ 括起来的单个字符。
(2)\t :一个制表位,实现对齐的功能
(3)\n :换行符
(4)\ :表示
(5)" :表示"

object Test03_Type{

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

    //    (1)字符常量是用单引号 ' ' 括起来的单个字符。
    val c1: Char = 'a'
    val c2: Char = 65535

    //    (2)\t :一个制表位,实现对齐的功能
    val c3: Char = '\t'

    //    (3)\n :换行符
    val c4: Char = '\n'
    println(c3 + 0)
    println(c4 + 0)

    //    (4)\\ :表示\
    val c5: Char = '\\'
    println(c5 + 0)

    //    (5)\" :表示"
    val c6: Char = '\"'
    println(c6 + 0)
  }
}

2.10 布尔类型:Boolean

1)基本说明
(1)布尔类型也叫Boolean类型,Booolean类型数据只允许取值true和false
(2)boolean类型占1个字节。
2)案例实操

object Test03_Type{

    def main(args: Array[String]): Unit = {
        
        val bo1: Boolean = true
        val bo2: Boolean = false
    }
}

2.11 Unit类型、Null类型和Nothing类型(重点)

1)基本说明
数据类型 描述
Unit 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null null , Null 类型只有一个实例值null
Nothing Nothing类型在Scala的类层级最低端;它是任何其他类型的子类型。
当一个函数,我们确定没有正常的返回值,可以用Nothing来指定返回类型,这样有一个好处,就是我们可以把返回的值(异常)赋给其它的函数或者变量(兼容性)
2)案例实操
(1)Unit类型用来标识过程,也就是没有明确返回值的函数。
由此可见,Unit类似于Java里的void。Unit只有一个实例——( ),这个实例也没有实质意义。

object Test03_Type{

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


    // unit
    val unit1: Unit = {
      10
      println("1")
    }
    println(unit1)

    // 如果标记对象的类型是unit的话  后面有返回值也没法接收
    // unit虽然是数值类型  但是可以接收引用数据类型   因为都是表示不接收返回值
    val i3: Unit = "aa"
	println(i3)
  }
}

(2)Null类只有一个实例对象,Null类似于Java中的null引用。Null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)。

object Test03_Type {

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

	// scala当中使用的字符串就是java中的string
    val aa: String = "aa"

    // null
    var aa1: String = "aa"

    aa1 = "bb"
    aa1 = null
    if (aa1 != null) {
      val strings: Array[String] = aa1.split(",")
    }

    // 值类型不能等于null,idea不会识别报错  编译器会报错
    var i4 = 10
    //    i4 = null
    }
}

(3)Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容。

object Test03_Type {

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

    val value: Nothing = {
      println("hello")
      1 + 1
      throw new RuntimeException()
	}    
	}
}

2.12 类型转换

Java的隐式转换规则:

public class TestCast {
    public static void main(String[] args) {
        byte n = 23;
        test(n);
    }

    public static void test(byte b) {
        System.out.println("bbbb");
    }

    public static void test(short b) {
        System.out.println("ssss");
    }

    public static void test(char b) {
        System.out.println("cccc");
    }

    public static void test(int b) {
        System.out.println("iiii");
    }
}

2.12.1 数值类型自动转换

当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
在这里插入图片描述
1)基本说明
(1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
(2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
(3)(byte,short)和char之间不会相互自动转换。
(4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。
2)案例实操

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

    //    (1)自动提升原则:有多种类型的数据混合运算时,
    //    系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。

    val fl: Float = 1 + 1L + 3.14f
    val d: Double = 1 + 1L + 3.14f + 3.14

    //    (2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
    val i = 10
    val b: Double = i

    //    (3)(byte,short)和char之间不会相互自动转换。
    // 因为byte和short是有符号的数值,而char是无符号的
    val b1: Byte = 10
    val c1: Char = 20

    //    (4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。
    val b2: Byte = 20
    //    val i1: Byte = b1 + b2
    val i1: Int = 1100000000
    val i2: Int = 1200000000
    // 超出范围的int值计算会造成结果错误
    val i3: Int = i1 + i2
    println(i3)

    }
}

注意:Scala还提供了非常强大的隐式转换机制(隐式函数,隐式类等)

2.12.2 强制类型转换

1)基本说明
自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意。
Java : int num = (int)2.5
Scala : var num : Int = 2.7.toInt
2)案例实操
(1)将数据由高精度转换为低精度,就需要使用到强制转换。
(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级。

object Test04_TypeCast {

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

    // 强制类型转换
    val d1 = 2.999
    //    (1)将数据由高精度转换为低精度,就需要使用到强制转换
    println((d1 + 0.5).toInt)


    //    (2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
    println((10 * 3.5 + 6 * 1.5).toInt)    
    }
}

2.12.3 数值类型和String类型间转换

1)基本说明
在程序开发中,我们经常需要将基本数值类型转成String类型。或者将String类型转成基本数值类型。
2)案例实操
(1)基本类型转String类型(语法:将基本类型的值+“” 即可)。
(2)String类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)。

object Test04_TypeCast {

    def main(args: Array[String]): Unit = {
    //    (1)基本类型转String类型(语法:将基本类型的值+"" 即可)
    val string: String = 10.0.toString
    println(string)

    val str: String = 1 + ""

    //    (2)String类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)
    val double: Double = "3.14".toDouble

    println(double + 1)
    println(double.toInt)

    // 不能直接将小数类型的字符串转换为整数  需要先转换为double再转换int
    //    println("3.14".toInt)

	// 标记为f的float数能够识别
//    println("12.6f".toFloat)    
}
}
扩展面试题数值存储机制介绍:
object Test04_TypeCast {
    def main(args: Array[String]): Unit = {

		// 将int值130强转为byte  值为多少
		// 0000 0000 ..16.. 1000 0010   => 表示int的130
		val i4 = 130

		// 1000 0010
		println(i4.toByte)
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

electron+vue3全家桶+vite项目搭建【24】设置应用图标,打包文件的图标

文章目录 引入实现步骤测试结果 引入 在electron中,我们可以通过electron-builder的配置文件来设置打包后的应用图标 实现步骤 因为mac环境下的图标需要特殊格式,这里我们可以利用electron-icon-builder进行配置 1.引入相关依赖 # 安装electron-ico…

Halcon 深度学习初探

什么是深度学习? 深度学习是一系列机器学习的方法集合,其算法结构类似于多层级的神经网络。通过对大量的训练样本图像的学习,提取其各个层次的特征,使网络具有判别和推理能力。 关于halcon中的深度学习: 自halcon17…

C#中的HashTable和Dictionary之间的区别

面试基础:C#中的HashTable和Dictionary之间的区别 HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。

ESP32 VS Code开发环境“hello world“

程序员的世界有个不成文的约定,第一个程序先跑"hello world",今天我们就在esp32上跑下hello world! vs code配置 新建一个esp32-test文件夹,并在该文件夹下打开vs code: mkdir esp32-test cd est32-test …

小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述 Ansible是一种开源的自动化工具,用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法,可以通过SSH协议远程管理和配置多台计算机。 Ansible的主要特点包括: 1、简单易用:设计简单&a…

自动驾驶多任务框架 MultiTask V3、HybridNets和YOLOP比较

目标检测和分割是自动驾驶汽车感知系统的两个核心模块。它们应该具有高效率和低延迟,同时降低计算复杂性。目前,最常用的算法是基于深度神经网络的,这保证了高效率,但需要高性能的计算平台。 在自动驾驶汽车的场景下,大多使用的都是计算能力有限的嵌入式平台,这使得难以满…

Python 算法基础篇之散列查找算法:哈希表、哈希集合、哈希映射

Python 算法基础篇之散列查找算法:哈希表、哈希集合、哈希映射 引言 1. 散列查找算法概述2. 哈希表的概念3. 哈希集合的概念4. 哈希映射的概念5. 实例演示实例1:哈希表实例2:哈希集合实例3:哈希映射 总结 引言 散列查找算法是一种…

Spring Cloud 之 Gateway 网关

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

Web安全基础

Web安全基础 一、Web应用安全概述1.1、什么是Web应用安全?1.2、WEB应用安全的兴起1.3、常见web应用1.3.1、常见Web应用—前后台 1.4、Web应用安全与传统安全的区别 二、Web应用的基本架构2.1、Web应用的基本架构2.2、Web服务的提供者——Web中间件2.3、简单的Web服务…

javascript实现久久乘法口诀表、document、write、console、log

文章目录 正序乘法口诀表倒序乘法口诀表logconsoledocumentwrite 正序乘法口诀表 function multiplicationTable() {for (let i 1; i < 9; i) {let val ;for (let j 1; j < i; j) {document.write(j * i (i * j) &nbsp );val ${j}*${i}${i * j} ;}consol…

肯尼亚税务局如何利用RPA、AI等创新技术来推动税务合规增加税收?

在当今的数字化时代&#xff0c;税务部门的工作变得日益复杂。依赖手动程序为税务部门带来了巨大的困难&#xff0c;这使得在有效管理税收和实现收入目标上遇到了阻碍。手动流程往往效率低下&#xff0c;易出错&#xff0c;而且难以应对大规模的数据处理需求。如果不能解决该问…

泛在电力物联网、能源互联网与虚拟电厂

导读&#xff1a;从能源互联网推进受阻&#xff0c;到泛在电力物联网名噪一时&#xff0c;到虚拟电厂再次走向火爆&#xff0c;能源领域亟需更进一步的数智化发展。如今&#xff0c;随着新型电力系统建设推进&#xff0c;虚拟电厂有望迎来快速发展。除了国网和南网公司下属的电…

【Redis-01】Redis的五种数据类型

Redis五种数据类型 1.String1.1特点1.2命令1.3实例 2.Hash2.1特点2.2命令2.3实例 3.List3.1特点3.2命令3.3实例 4.Set4.1特点4.2命令4.3实例 5. SortedSet5.1特点5.2命令5.3实例 1.String 1.1特点 String类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类…

harbor仓库故障排除

harbor仓库无法用docker login登录&#xff0c;一直报x509: cannot validate certificate for 172.17.10.29 because it doesn’t contain any IP SANs 1、检查docker和harbor的服务是否启动 [rootk8s-harbor harbor]#systemctl status harbor.service [rootk8s-harbor harbo…

应对突发流量,如何快速为自建 K8s 添加云上弹性能力

作者&#xff1a;庄宇 以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革&#xff0c;其正迅速成为全世界数据中心的统一 API。 为了保证业务持续稳定、用户访问不中断&#xff0c;高可用、高弹性等能力是应用架构设计不变的追求&#xff0c;多集群架构天然具备…

控制对文件访问

控制对文件访问 Linux文件权限 权限文件影响目录影响r读取文件内容列出目录内容w更改文件内容创建删除目录文件x作为命令执行目录可以变成当前工作目录 命令行管理文件系统权限 更改文件和目录权限 chmod chmod WhoWhatWhich file|directoryWho (u,g,o,a代表用户&#xff…

抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵账号管理系统

前言&#xff1a; 抖音seo源码&#xff0c;抖音矩阵系统源码搭建&#xff0c;抖音矩阵同步分发。抖音seo源码部署是需要对接到这些正规接口再来做开发的&#xff0c;目前账号矩阵程序开发的功能&#xff0c;围绕一键管理多个账号&#xff0c;做到定时投放&#xff0c;关键词自动…

C# 提示:无法加载 DLL“XXX.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

今天再调试程序时发现程序再笔记本上运行正常&#xff0c;然而拷贝到客户主机上之后出现了&#xff08;System.DllNotFoundException: 无法加载 DLL“msc.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。&#xff09;的问题&#xff0c;经过再三调试&#xff0c; …

python编程语言之数据类型

python数据类型 https://draw.io/ 画图 str 序列操作 字符串属于序列类型&#xff0c;所谓序列&#xff0c;指的是一块可存放多个值的连续内存空间&#xff0c;这些值按一定顺序排列&#xff0c;可通过每个值所在位置的编号&#xff08;称为索引、下标&#xff09;访问它们…

6.3.3 利用Wireshark进行协议分析(三)Wireshark基本操作

6.3.3 利用Wireshark进行协议分析&#xff08;三&#xff09; 一、启动Wireshark界面 如图 从上到下依次是 标题栏菜单栏工具栏过滤栏捕获窗口&#xff0c;在该区域用户可以选择网络接口&#xff0c;设置捕获选项 Wireshark允许用户将捕获到的数据包信息保存在指定的文件中…