double和float的区别与使用

double和float类型的区别与使用

  1. 在Java中,double和float都是基本数据类型,用于表示浮点数(即带有小数点的数)。
    • 它们在精度和范围上有所不同:
      • double类型提供了更高的精度和更大的范围,而float类型则精度更低,范围更少;
    • 声明这些类型的变量时,你需要遵循特定的语法规则。
      在这里插入图片描述

double 类型

  1. double类型的变量用于存储双精度浮点数。当你声明一个double类型的变量时,你不需要在数值后面加上任何特定的后缀(尽管在某些情况下,加上D或d后缀可以明确表示这是一个double类型的字面量,但这对于变量声明本身不是必需的)。
    • 使用一个浮点数字面量(如3.14),Java会将其视为double类型
    • 如果直接使用一个整型(如10),Java会进行自动类型转换,即从int 自动转换 为double类型。
double md = 3.14; // 3.14就是double类型的数据  
double ad = 3.0; // 注意:即使没有小数部分,这也是一个double类型的浮点数
double c = 3;// 自动类型转换(int-》double)
double d = 10.0d;
double e = 10D;
  • 自动类型转换:精度小的类型自动转换为精度大的数据类型。
    • 数据类型按精度(容量)大小排序为:char—>int–>long–>float–>double或者byte–>short–>int–>long–>float–>double

float 类型

  1. float类型的变量用于存储单精度浮点数
    • 在声明float类型的变量并给它赋值时:
      • 如果你直接使用一个浮点数字面量(如3.14),Java会将其视为double类型因为浮点数字面量默认是double类型的。为了避免编译错误,你需要在数值后面加上F或f后缀来明确表示这是一个float类型的字面量。(或者使用 强制类型转换,不建议,会产生精度损失)
      • 如果直接使用一个整型(如3),Java会进行自动类型转换,即从int 自动转换 为float类型。
float j = 3.14;//这个会报错的,double不可以自动转换为float类型float m = 3.14f;  
float n = 3.0f; // 必须加上f或F后缀
float a = 3;//这个也可以(自动类型转换)

例题:分别有三个变量,a,b,c,请问一下的定义中哪些有错误:float a=2;float b=2.5;float c=3.0f

Float b = 2.5;存在语法错误,在Java中2.5是double类型的数据,不能自动转换为float类型的数据(可以使用强制类型转换,但是会有精度损失的风险,不建议),所以应该改成float b= 2.5f;

Float a= 2;虽然没有语法错误,但是也存在一定的风险,因为2是一个int类型的数据,它会产生自动类型转换,有int转换为float。所以最好是改成float = 2f;

总结

  • double类型的变量用于存储双精度浮点数,可以表示更大范围和更高精度的浮点数。
  • float类型的变量用于存储单精度浮点数,范围和精度较小。
  • 在声明float类型的变量并赋值时,需要在浮点数字面量后加上F或f后缀,以明确表示这是一个float类型的字面量。double类型的字面量在赋值给double类型变量时不需要特殊后缀(也可以加D或d)。

double和float的精度损失的问题解决

  • 使用BigDecimal类:在Java中,BigDecimal类提供了一种精确的浮点数计算方式。这个类可以表示任意精度的十进制数,并且可以执行精确的数学运算。当需要处理精确的小数运算时,可以使用BigDecimal来代替基本数据类型float和double。
    • double和float类型的数据进行运算时,是可能发生精度损失,不是一定会发生精度损失的问题
		double a =0.1;double b = 0.2;System.out.println(a + b);//0.30000000000000004System.out.println(a * b);//0.020000000000000004BigDecimal c = new BigDecimal("0.1");BigDecimal d = new BigDecimal("0.2");BigDecimal sum = c.add(d); //求和System.out.println(sum);// 结果为 0.3BigDecimal ji = c.multiply(d);//乘积System.out.println(ji);// 结果为0。02
  • 设置浮点数的精度:如果必须使用float或double类型,并且可以接受一定程度的精度损失,可以通过设置浮点数的小数点后的位数来尽量减小误差。这通常通过四舍五入等方式实现,但需要注意,这并不能完全避免精度丢失。
  • 避免不必要的浮点数运算:在算法设计时,尽量避免不必要的浮点数运算,或者通过数学变换将浮点数运算转化为整数运算。例如,在计算百分比时,可以先将百分比乘以100转换为整数进行计算,最后再除以100得到结果。

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

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

相关文章

昇思14天

ResNet50图像分类 1. ResNet50图像分类概述 ResNet50是一种用于图像分类的深度卷积神经网络。图像分类是计算机视觉的基本应用,属于有监督学习范畴。ResNet50通过引入残差结构,解决了深层网络中的退化问题,使得可以训练非常深的网络。 2. …

(自用)共享单车服务器(二) 项目日志

stdin、stdout、stderr 注意&#xff1a;stderr是不缓存的&#xff0c;stdout则进行行间缓存。接下来我们看下行间缓存的效果&#xff0c;请参考以下代码&#xff1a; #include "stdio.h" #include <unistd.h>int main(int argc, char** argv) {for (int i 0…

LNMP搭建Discuz和Wordpress

1、LNMP L:linux操作系统 N&#xff1a;nginx展示前端页面web服务 M&#xff1a;mysql数据库&#xff0c;保存用户和密码&#xff0c;以及论坛相关的内容 P&#xff1a;php动态请求转发的中间件 数据库的作用&#xff1a; 登录时验证用户名和密码 创建用户和密码 发布和…

接口测试基础知识(url,http,接口测试流程)

接口测试的节点&#xff1a;在功能测试时&#xff0c;我们需要等待前端与后端都开发完成之后&#xff0c;才能进行界面的功能测试&#xff0c;接口测试则只需要在后端开发完成&#xff0c;即可进行接口测试&#xff0c;如下图表示&#xff1a; 接口测试的节点.png 学习路径.png…

【PTA天梯赛】L1-003 个位数统计(15分)

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法刷题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录 题目题解总结 题目 题目链接 题解 使用string把长度达1000位的数字存起来开一个代表个位数的数组 a[11]倒序计算最后一位&#xff0c;…

YOLOv5、v7、v8如何修改检测框文字颜色和大小

YOLOv5和YOLOv8默认的标签文字颜色为白色&#xff0c;但是在亮度较大的图片中文字不明显&#xff0c;就需要对标签文字的颜色进行修改 一、YOLOv5 打开X:\Anaconda\envs\your-env\Lib\site-packages\ultralytics\utils\plotting.py X代表你的anaconda安装的盘&#xff0c;yo…

【面试题】正向代理和反向代理的区别?

正向代理&#xff08;Forward Proxy&#xff09;和反向代理&#xff08;Reverse Proxy&#xff09;是两种常见的代理服务器类型&#xff0c;它们在网络通信中扮演着不同的角色&#xff0c;具有不同的功能和应用场景。 一、正向代理 1. 定义与位置 正向代理是位于客户端和目标…

修改服务器挂载目录

由于我们的项目通常需要挂载一个大容量的数据盘来存储文件数据&#xff0c;所以我们每台服务器都需要一个默认的挂载目录来存放这些数据&#xff0c;但是由于我们的误操作&#xff0c;导致挂载目录名字建错了&#xff0c;这时候后端就读不到挂载目录了&#xff0c;那我们我们的…

机器人三定律及伦理分析

全世界的机器人定律并没有一个统一的标准或体系&#xff0c;但是在科学文献中&#xff0c;最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础&#xff0c;分析现有的机器人伦理和实际应用中的问题&#xff0c;给出若干实例&#xff0c;并对相…

从微软 Word 中提取数据

从 Microsoft Word 文档中提取数据可以通过编程来实现&#xff0c;有几种常见的方法&#xff0c;其中之一是使用 Python 和 python-docx 库。python-docx 是一个处理 .docx 文件&#xff08;Microsoft Word 文档&#xff09;的 Python 库&#xff0c;可以读取和操作 Word 文档的…

windows USB 设备驱动开发-USB带宽

本文讨论如何仔细管理 USB 带宽的指导。 每个 USB 客户端驱动程序都有责任最大程度地减少其使用的 USB 带宽&#xff0c;并尽快将未使用的带宽返回到可用带宽池。 在这里&#xff0c;我们认为USB 2.0 的速度是480Mbps、12Mbps、1.5Mbps&#xff0c;这分别对应高速、全速、低速…

第4章 课程发布:模块需求分析,课程预览(模板引擎 静态页面),课程审核,课程发布(分布式事务,页面静态化:熔断降级),课程搜索(es索引)

1 模块需求分析 1.1 模块介绍 课程信息编辑完毕即可发布课程&#xff0c;发布课程相当于一个确认操作&#xff0c;课程发布后学习者在网站可以搜索到课程&#xff0c;然后查看课程的详细信息&#xff0c;进一步选课、支付、在线学习。 下边是课程编辑与发布的整体流程&#…

Python数据处理必备:如何高效校验各种空值?

更多Python学习内容&#xff1a;ipengtao.com 在编程中&#xff0c;处理空值是一个常见且重要的任务。空值可能会导致程序异常&#xff0c;因此在进行数据处理时&#xff0c;必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Py…

数据结构作业/2024/7/9

2>实现双向循环链表的创建、判空、尾插、遍历、尾删、销毁 fun.c #include "head.h" //1.双向循环链表的创建 doubleloop_ptr create_list() …

【自用】【高昆轮概率论与数理统计笔记】2.1 分布函数的概念与性质

不定期更新&#xff0c;前面的章节会在学完后补回来&#xff0c;重新学学概率&#xff0c;当年考研考的数学二&#xff0c;没有概率基础&#xff0c;想自己补补&#xff0c;视频课是高昆轮老师讲的浙大四版概率论教材的视频课&#xff0c;地址&#xff1a; 第一章&#xff1a;h…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如&#xff1a; 某个视频下a写了条评论&#xff0c;那a的parent_id就是0;b回复了a&#xff0c;那b的parent_id就是a的id;c回复了b&#xff0c;那c的parent_id就是b的id; 这样&#xff0c;所有评论…

全终端自动化测试框架wyTest

突然有一些觉悟&#xff0c;程序猿不能只会吭哧吭哧的低头做事&#xff0c;应该学会怎么去展示自己&#xff0c;怎么去宣传自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;这两天一直在整理自己的作品&#xff0c;也为接下来的找工作多做点准备。接下来…

leetcode--从中序与后序遍历序列构造二叉树

leeocode地址&#xff1a;从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder …

三级_网络技术_12_路由设计技术基础

1.R1、R2是一个自治系统中采用RIP路由协议的两个相邻路由器&#xff0c;R1的路由表如下图(a)所示&#xff0c;当R1收到R2发送的如下图(b)的(V.D)报文后&#xff0c;R1更新的4个路由表项中距离值从上到下依次为0、3、3、4 那么&#xff0c;①②③④可能的取值依次为()。 0、4、…

Git命令常规操作

目录 常用操作示意图 文件的状态变化周期 1. 创建文件 2. 修改原有文件 3. 删除原有文件 没有添加到暂存区的数据直接 rm 删除即可&#xff1a; 对于添加到暂存区的数据 文件或目录&#xff1a; 4. 重命名暂存区数据 5. 查看历史记录 6. 还原历史数据 恢复过程的原…