【2023,学点儿新Java-31】测试:整型和浮点型变量的使用 | 附:计算机存储单位(转换关系)| 企业真题:为什么0.1+0.2不等于0.3

news2024/10/6 19:33:52

前情提要:

  • 【2023,学点儿新Java-30】变量的基本使用:变量的意义 | 变量的构成要素 | Java中变量的数据类型、变量的使用 | 附:Java中变量的作用域 | 数据类型、变量名和变量值哪个最重要?
  • 【2023,学点儿新Java-29】(继续开始)Java中的标识符 | 什么样的标识符才是有效的?| 为什么Java中的标识符不能以数字开头?| 如何让代码更整洁?
  • 【2023,学点儿新Java-28】你知道Java中的特殊值都有什么吗?| null 的详细信息 | 什么是空引用?

 
要努力呀,为了想要的生活,为了人间的烟火,为了今天的风和月。

 

🎯作者主页: 追光者♂🔥

        

🌸个人简介:
 
💖[1] 计算机专业硕士研究生💖
 
🌟[2] 2022年度博客之星人工智能领域TOP4🌟
 
🏅[3] 阿里云社区特邀专家博主🏅
 
🏆[4] CSDN-人工智能领域优质创作者🏆
 
📝[5] 预期2023年10月份 · 准CSDN博客专家📝  
 

  • 无限进步,一起追光!!!

        

🍎感谢大家 点赞👍  收藏⭐   留言📝!!!

        

🌿本篇综合了变量、运算符和计算机存储单位的重要概念。具体地,介绍了变量的作用和使用方法,涵盖了整型和浮点型变量,并讨论了计算机存储单位的转换。通过本篇内容,你将了解到这些基础概念对编写高效、准确的代码的重要性。

🕝目录

  • 🍉一、变量和运算符——测试 整型和浮点型变量的使用
    • 🍦1.1 整型变量:byte、short、int 和 long
    • 🍦1.2 浮点型变量:float 与 double
      • 🍚1.2.1 附:浮点型变量 表示精度 说明 (附:企业真题)
    • 🍦1.3 测试
    • 🍦1.4 附:计算机存储单位

🍉一、变量和运算符——测试 整型和浮点型变量的使用

🍦1.1 整型变量:byte、short、int 和 long

在Java中,整型变量用于存储整数值。Java提供了几种不同大小的整型变量类型,包括byte、short、int和long。下面是关于这些整型变量的使用的介绍:

  1. byte
  • 大小:8位,取值范围为 -128到127
  • 用途:通常用于节省内存,或者在处理二进制数据时使用。
  1. short
  • 大小:16位,取值范围为 -32768到32767
  • 用途:较少使用,通常被int或long代替
  1. int
  • 大小:32位,取值范围为 -2147483648到2147483647
  • 用途:最常用的整型变量类型,通常用于存储整数值
  1. long
  • 大小:64位,取值范围为 -9223372036854775808到9223372036854775807
  • 用途:当需要表达较大范围的整数时使用

可用一个生动的图来描述:

在这里插入图片描述

Java各整数类型 有固定的表数范围和字段长度,但不受具体操作系统的影响,从而保证Java程序的可移植性。(byte翻译即为 字节)

在这里插入图片描述

其它要补充的注意事项:

  • 定义long类型的变量,赋值时需要以"l"或"L"作为后缀。

  • Java程序中 变量 通常声明为 int型,除非 不足以表示较大的数,才使用long。

  • Java的整型常量默认为 int 型

整型变量的声明和赋值示例:

int myInt = 100; // 声明一个名为myInt的int变量,并将其赋值为10
byte myByte = 52; // 声明一个名为myByte的byte变量,并将其赋值为5
long myLong = 10000000000L; // 声明一个名为myLong的long变量,并将其赋值为10000000000(注意后面的L表示这是一个long类型的字面值)

// 可以对整型变量进行数学运算
int result = myInt + 20; // 将myInt和20相加,并将结果赋值给result变量

 

🍦1.2 浮点型变量:float 与 double

在Java中,浮点型变量用于存储浮点数值,即带有小数部分的数字。Java提供了两种不同精度的浮点型变量类型:float和double

与整数类型类似,Java 浮点类型也有固定的 表示范围和字段长度,不受具体操作系统的影响。

在这里插入图片描述

  • 浮点型常量有两种表示形式:
    • 十进制数形式。如:10.24 256.0f .128 (注意:必须有小数点
    • 科学计数法形式。如:6.47e2 648E2 256E-2
  • float单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。 ( 大小:32位) (取值范围:约±3.40282347E+38F(有效位数为6-7位)) (用途:当需要较小范围的浮点数或者节省内存时使用。)
  • double双精度,精度是float的两倍。通常采用此类型。(大小:64位) (取值范围:约±1.79769313486231570E+308(有效位数为15位)) (用途:最常用的浮点型变量类型,通常用于存储浮点数。)
  • 定义float类型的变量,赋值时需要以"f"或"F"作为后缀。
  • Java 的浮点型常量默认为double型

浮点型变量的声明和赋值示例:

double myDouble = 3.14; // 声明一个名为myDouble的double变量,并将其赋值为3.14
float myFloat = 1.23f; // 声明一个名为myFloat的float变量,并将其赋值为1.23(注意后面的f表示这是一个float类型的字面值)

// 可以对浮点型变量进行数学运算
double result = myDouble + 2.0; // 将myDouble和2.0相加,并将结果赋值给result变量

🍚1.2.1 附:浮点型变量 表示精度 说明 (附:企业真题)

  • 并不是所有的小数 都能可以精确的用二进制浮点数表示。二进制浮点数 不能精确的表示0.1、0.01、0.001这样10的负次幂。

  • 浮点类型float、double的数据不适合在不容许舍入误差的金融计算领域。如果需要精确数字计算或保留指定位数的精度,需要使用BigDecimal类

事实上,不仅java语言如此,所有的编程语言都如此!

例如,来看下面的举例:

//测试1:(企业真题:为什么0.1 + 0.2不等于0.3?)
System.out.println(0.1 + 0.2);//0.30000000000000004

//测试2:
float ff1 = 123321123f;
float ff2 = ff1 + 1;
System.out.println(ff1);
System.out.println(ff2);
System.out.println(ff1 == ff2);

在这里插入图片描述

详细解释:

0.1 + 0.2 不等于 0.3 的原因与浮点数的精度二进制表示方式有关。在计算机中,浮点数 使用二进制表示,而二进制无法准确地表示所有的十进制分数。

在这个特定的例子中,0.1 和 0.2 都是无限循环的 二进制小数。当计算机尝试将它们相加时,会导致一个舍入误差。这是因为这些十进制分数无法被精确地表示为有限的二进制位数。

具体来说,0.1 在二进制中是一个无限循环的数字:0.0001100110011001100110011001100110011…(在32位浮点数表示中)。同样,0.2 也是一个无限循环的数字:0.001100110011001100110011001100110011…。当计算机进行浮点数加法时,它会进行近似计算,并且只保留一定数量的有效位数。因此,结果可能存在舍入误差。

由于舍入误差的存在,0.1 + 0.2 的实际计算结果可能是接近 0.30000000000000004。这与我们期望的精确结果 0.3 不完全相同。这是浮点数运算中常见的问题,并且不仅限于Java,其他编程语言也存在类似的情况。

在编写代码时,如果需要精确的小数运算,可以使用 BigDecimal 类来进行高精度的计算。这个类提供了精确的十进制运算,但需要额外的计算开销和内存消耗。另外,在比较浮点数时,应该使用范围或误差允许的方式,而非直接的相等判断。

因此,0.1 + 0.2 不等于 0.3 是因为 浮点数的二进制表示和舍入误差 导致的。所以这警示我们:在进行浮点数运算和比较时,应该了解这些特点,并根据实际需求选择适当的处理方式。

 

 

补充说明:

浮点型变量 广泛用于需要存储小数的场景,例如科学计算、金融应用、图形处理等。

然而,由于浮点数的存储方式是二进制的近似表示,可能会导致精度损失和舍入误差。在进行浮点数运算时,应注意这些问题,并根据需要选择恰当的变量类型和算法来处理浮点数。

🍦1.3 测试

变量的基本使用:(再写一遍,加深印象!)

/*
测试变量的基本使用

1. 变量的理解:内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化

2. 变量的构成包含三个要素:数据类型、变量名、存储的值

3. Java中变量声明的格式:数据类型 变量名 = 变量值

4. Java中的变量按照数据类型来分类:
	基本数据类型(8种):
		整型:byte \ short \ int \ long 
		浮点型:float \ double 
		字符型:char
		布尔型:boolean

	引用数据类型:
		类(class)
		数组(array)
		接口(interface)

		枚举(enum)
		注解(annotation)
		记录(record)

5. 定义变量时,变量名要遵循标识符命名的规则和规范。

6. 说明:
① 变量都有其作用域。变量只在作用域内是有效的,出了作用域就失效了。
② 在同一个作用域内,不能声明两个同名的变量
③ 定义好变量以后,就可以通过变量名的方式 对变量进行调用和运算。
④ 变量值在赋值时,必须满足变量的数据类型,并且在数据类型有效的范围内变化。

*/
class VariableTest {
	public static void main(String[] args) {
		
		
		//定义变量的方式1:
		char gender; //过程1:变量的声明
		gender = '男'; //过程2:变量的赋值(或初始化)

		gender = '女';
		
		//定义变量的方式2:声明与初始化合并
		int age = 12;


		System.out.println(age);
		System.out.println("age = " + age);
		System.out.println("gender = " + gender);

		//在同一个作用域内,不能声明两个同名的变量
		//char gender = '女';

		gender = '男';
		
		//由于number前没有声明类型,即当前number变量没有提前定义。所以编译不通过。
		//number = 10;

		byte b1 = 127;
		//b1超出了byte的范围,编译不通过。
		//b1 = 128;

	}

	public static void main123(String[] args) {
		//System.out.println("gender = " + gender);

		char gender = '女';
		
	}
}

执行的结果如下:

在这里插入图片描述

整型和浮点型变量的使用:

/*
测试整型和浮点型变量的使用
*/
class IntandFloatTest1 {
	public static void main(String[] args) {
		
		//1.测试整型变量的使用
		// byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节) 

		byte b1 = 12;
		byte b2 = 127;
		//编译不通过。因为超出了byte的存储范围
		//byte b3 = 128;

		short s1 = 1234;

		int i1 = 123456789;
		//① 声明long类型变量时,需要提供后缀。后缀为'l'或'L'
		long l1 = 123321336L;

		//② 开发中,大家定义整型变量时,没有特殊情况的话,通常都声明为int类型。

		//2.测试浮点类型变量的使用
		//float \ double
		double d1 = 12.3;
		//① 声明long类型变量时,需要提供后缀。后缀为'f'或'F'
		float f1 = 12.3f;
		System.out.println("f1 = " + f1);

		//② 开发中,大家定义浮点型变量时,没有特殊情况的话,通常都声明为double类型,因为精度更高。

		//③ float类型 表示范围要大于long类型的表数范围。但是精度不高。

		//测试 浮点型变量的精度
		//结论:通过测试 发现浮点型变量的精度不高。如果在开发中,需要极高的精度,需要使用BigDecimal类替换浮点型变量。
		//测试1
		System.out.println(0.1 + 0.2);

		//测试2:
		float ff1 = 123321213f;
		float ff2 = ff1 + 1;
		System.out.println(ff1);
		System.out.println(ff2);
		System.out.println(ff1 == ff2);
		
	}
}

来看执行的结果:(大家也可以通过调试代码,自行测试~)

在这里插入图片描述

🍦1.4 附:计算机存储单位

  • 字节(Byte): 是计算机用于计量存储容量基本单位,一个字节等于8 bit。

  • 位(bit): 是数据存储的最小单位。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8 bit 就称为一个字节(Byte)。

  • 转换关系:

    • 8 bit = 1 Byte
    • 1024 Byte = 1 KB
    • 1024 KB = 1 MB
    • 1024 MB = 1 GB
    • 1024 GB = 1 TB

 


 

🍒 热门专栏推荐

  • 🥇Python&AI专栏:【Python从入门到人工智能】
  • 🥈前端专栏:【前端之梦~代码之美(H5+CSS3+JS.】
  • 🥉文献精读&项目专栏:【小小的项目 (实战+案例)】
  • 🍎C语言/C++专栏:【C语言、C++ 百宝书】(实例+解析)
  • 🍏Java系列(Java基础/进阶/Spring系列/Java软件设计模式等)
  • 🌞问题解决专栏:【工具、技巧、解决办法】
  • 📝 加入Community 一起追光:追光者♂社区

 

持续创作优质好文ing…✍✍✍

 

记得一键三连哦!!!

 

求关注!求点赞!求个收藏啦!

在这里插入图片描述

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

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

相关文章

vue中使用v-for实现两次嵌套循环,判断某子元素是否显示,进行复杂表单校验

一、需求场景: 有以下一个使用场景,名称111、名称222、名称333,是放在一个大数组里的,然后通过第一层for循环显示出来的。名称333数组里又包含自己的子数组,子数组再通过第二次for循环展示出来。当我们选择发放方式的…

基于Javaweb实现ATM机系统开发实战(七)用户密码修改

接下来我们完成密码修改的功能&#xff0c;还是老规矩先看前端界面&#xff1a;这里我们先把需要的变量进行修改&#xff0c;然后把卡号变成不可修改&#xff1a; <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-…

深度挖掘文物价值,VR博物馆讲好文物故事

文物不言&#xff0c;自有春秋。丝绸、字画、瓷器、古玩等&#xff0c;铺陈的是传奇&#xff0c;激荡的是灵魂。历史文物珍贵的莫过于其历史与文化的价值&#xff0c;倘若不能被更多的人欣赏、研究、传承&#xff0c;那么这些文物就很难实现“价值外溢”。 单纯的去读历史课本&…

分层解耦-三层架构

三层架构 在上篇文章的案例中写文章-CSDN创作中心 的Controller类承担了对于数据操作&#xff08;访问&#xff09;、对于对于数据的逻辑处理、以及接受请求响应数据的工作&#xff0c;对于类似的小项目来说冗杂程度还可以接收&#xff0c;但是如果项目更加复杂&#xff0c;就…

QT使用同一按钮实现打开/关闭新窗口

QT使用同一按钮实现【打开/关闭】新窗口&#xff0c;实现方案如下&#xff1a; 使用一个全局状态变量记录窗口打开状态通过该状态实现新窗口的show和close 实现代码如下&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h" #include "…

怎么用PDF24 Tools工具在线进行PDF文件合并

PDF文件是经常会被用到&#xff0c;它在我们的日常生活和工作中扮演着重要的角色。PDF文件合并是将多个PDF文件合并为单个文件&#xff0c;这个过程通常是为了方便管理多个PDF文件&#xff0c;或者将多个PDF文件合并为一个整体以便于共享或打印。既然如此&#xff0c;如何快速合…

达梦sql执行计划、HINT、索引简单应用

目录 收集统计信息. 3 1. 通过DBMS_STATS包中的方法. 3 2、删除指定表的统计信息. 3 执行计划. 3 常用执行计划操作符. 4 统计指定sql执行号的所有操作符的执行时间. 5 HINT 5 并行操作&#xff1a;. 6 查询计划重用、结果集重用. 7 示例. 8 1、收集统计信息&#x…

Comparable/Comparator

现在有一个自定义学生的学生类,里面有name属性,和age属性,我们如何去比较大小? class Student{public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}Overridepublic String toString() {return "Student{" &…

路径规划算法:基于广义正态分布优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于广义正态分布优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于广义正态分布优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用…

关于博客更新的二三事

原文链接&#xff1a;关于博客更新的二三事 前言 很显然&#xff0c;正如大家所见到的&#xff0c;这一版本主题v4.7.0进行了大量的删减工作。可能正如 “大道至简” 吧&#xff0c;相比于前一版本 v3.7.1 &#xff0c;个人认为可能有点花哨&#xff08;仅个人认为&#xff09…

uni-app使用plus本地推送通知栏信息,不使用第三方个推实现消息在线统一推送、消息通知(MQTT、WebSocket、setInterval定时器)

plus.push.createMessage() 因项目一直是运行在内网&#xff0c;所以不支持使用uni-push等运行在公网的第三方个推渠道。 那就只能使用plus.push.createMessage()&#xff0c;示例代码如下&#xff1a; let content "您有一条新的消息~"; let options {"cov…

玩转CSS基础:CSS盒模型

CSS盒模型 什么是CSS盒模型&#xff1f; 完整的 CSS 盒模型应用于块级盒子&#xff0c;内联盒子只使用盒模型中定义的部分内容。模型定义了盒的每个部分 —— margin, border, padding, and content &#xff0c;合在一起就是在页面上看到的内容。为了增加一些额外的复杂性&a…

操作系统Linuxday04

Linux用户相关 Linux是多用户多任务&#xff0c;可以支持多个用户同时登录&#xff0c;并且多个用户可以执行不同的任务&#xff0c;互不影响。 不同的用户&#xff0c;有不同的权限&#xff0c;可以完成权限以内的不同的任务 用户组 如果一次性用户太多&#xff0c;分别给…

【嵌入式Linux项目】基于Linux的全志H616开发板智能垃圾桶项目

目录 一、功能需求 二、涵盖的知识点 1、wiringPi库下的相关硬件操作函数调用 2、线程&#xff08;未使用互斥锁和条件&#xff09; 3、父子进程 4、网络编程&#xff08;socket套接字&#xff09; 5、进程间通信&#xff08;共享内存和信号量&#xff09; 三、开发环境…

[MySQL]MySQL内置函数

[MySQL]MySQL内置函数 文章目录 [MySQL]MySQL内置函数1. 日期函数2. 字符串函数3. 数学函数4. 其他函数 1. 日期函数 常用日期函数如下&#xff1a; 函数名称描述current_date()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳now()获取当前日期时…

Redis_安装配置(2)

目录 一、安装redis 1、安装gcc依赖 2、下载并解压安装包 3、编译 4、安装 5、设置全局命令 二、启动redis 1、前台启动 2、后台启动 2.1 修改redis.conf文件 2.2 使用指定配置启动redis 2.3 kill redis的进程 3、开机启动 三、配置redis 远程访问设置 设置密码…

Magic3D: High-Resolution Text-to-3D Content Creation(高分辨率文本到3d内容创建)

Magic3D: High-Resolution Text-to-3D Content Creation&#xff08;高分辨率文本到3d内容创建&#xff09; Paper&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId4738271534435532801&noteId1848084184935912192 Project&#xff1a;https://research.nvidia…

InstructGPT:语言模型的人类反馈指令对齐

论文标题&#xff1a;Training language models to follow instructions with human feedback论文链接&#xff1a;https://arxiv.org/abs/2203.02155论文来源&#xff1a;OpenAI 一、概述 大型语言模型&#xff08;Large language models&#xff0c;LLMs&#xff09;可以通过…

TortoiseGit的安装和使用

1、TortoiseGit的下载安装 安装说明:因为TortoiseGit 只是一个程序壳,必须依赖一个 Git Core,所以安装前请确定已完成git安装和配置。 TortoiseGit下载地址 https://download.tortoisegit.org/tgit/ ,最新稳定版本2.11.0.0。 点进去下载程序包和语言包(非必须),安装时…

【网络】网络基础(一)

目录 一、网络协议初识 1、协议分层 2、OSI七层模型 3、 TCP/IP五层(或四层)模型 4、对网络协议栈的理解 二、网络传输基本流程 1、网络传输流程图 1.1、同一个网段内的两台主机进行文件传输 1.2、跨网段的主机的文件传输 三、数据包封装和分用 四、网络中的地址管理…