Java中double类型数据进行运算的时候出现精度丢失问题

精度丢失通常发生在浮点数运算中。以下是几个常见的例子展示了浮点数精度丢失的现象:

示例 1: 简单加减法中的精度丢失
在某些情况下,浮点数的简单加减法会产生意想不到的结果。
 
public class PrecisionLossExample {public static void main(String[] args) {double a = 0.1;double b = 0.2;double result = a + b;System.out.println("0.1 + 0.2 = " + result); // 输出不等于0.3}
}
输出:0.1 + 0.2 = 0.30000000000000004

示例 2: 大小数相加导致精度丢失


当一个很大的数和一个很小的数相加时,小数的值可能会丢失。


public class PrecisionLossExample2 {public static void main(String[] args) {double largeNumber = 1e16;double smallNumber = 1.0;double result = largeNumber + smallNumber;System.out.println("1e16 + 1.0 = " + result); // 输出仍然是1e16}
}
输出:1e16 + 1.0 = 1.0E16

示例 3: 连续运算导致的精度丢失


连续的浮点数运算会累积精度误差。


public class PrecisionLossExample3 {public static void main(String[] args) {double value = 1.0;for (int i = 0; i < 1000000; i++) {value += 1e-6;}System.out.println("Result: " + value); // 输出不等于2.0}
}
输出:
Result: 1.9999999999177334

示例 4: 使用BigDecimal解决精度丢失


为了避免上述的精度丢失问题,可以使用BigDecimal类来进行精确的浮点数计算。

import java.math.BigDecimal;public class BigDecimalExample {public static void main(String[] args) {BigDecimal a = new BigDecimal("0.1");BigDecimal b = new BigDecimal("0.2");BigDecimal result = a.add(b);System.out.println("0.1 + 0.2 = " + result.toString()); // 输出准确的0.3}
}
输出:
0.1 + 0.2 = 0.3

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

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

相关文章

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术&#xff0c;可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法&#xff0c;特别适合于展示变量之间的相关性&#xff0c;对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先&#xff0c;确保你已经安装了matplotlib…

收银系统源码-千呼新零售【分销商城】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

水位自动监测摄像机

随着科技的不断进步&#xff0c;水位自动监测摄像机作为现代智能监控技术的重要应用&#xff0c;正在广泛应用于水利工程、防洪管理和环境监测等领域&#xff0c;显著提升了监测效率和数据准确性。水位自动监测摄像机利用高精度摄像头和先进的图像处理技术&#xff0c;能够实时…

鸿蒙系统——强大的分布式系统

鸿蒙相比较于传统安卓最最最主要的优势是微内核分布式操作系统&#xff0c;具有面向未来&#xff0c;跨设备无缝协作&#xff0c;数据共享的全场景体验。下面简单来感受一下鸿蒙系统的多端自由流转。 自由流转概述 场景介绍 随着全场景多设备的生活方式不断深入&#xff0c;…

Python处理word的常用操作详解

Python 处理 Word 文档通常使用 python-docx 库。以下是一些常用的操作和相应的代码示例&#xff1a; 这些是使用 python-docx 库处理 Word 文档时的一些常用操作。根据你的具体需求&#xff0c;可能还需要探索更多的功能和方法。在使用这些功能之前&#xff0c;请确保已经安装…

解释什么是lambda函数?它有什么好处?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

深度解密Spark性能优化之道

课程介绍 课程通过实战案例解析和性能调优技巧的讲解&#xff0c;帮助学员提升大数据处理系统的性能和效率。课程内容涵盖了Spark性能调优的各个方面&#xff0c;包括内存管理、并行度设置、数据倾斜处理、Shuffle调优、资源配置等关键技术和策略。学员将通过实际案例的演示和…

线性代数知识点搜刮

求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等&#xff0c;取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行&#xff08;…

【面试干货】Object 类中的公共方法详解

【面试干货】Object 类中的公共方法详解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#…

报工计件工资核算h5开源版开发

报工计件工资核算h5开源版开发 小型计件工资管理系统&#xff0c;支持后台制定工价&#xff0c;核算工资。支持员工H5端报工&#xff0c;和查看工资情况。 H5手机端 支持在线报工&#xff0c;支持查看我的工资。 自定义费用项 在基础计件工资基础上增加扣除和增加项&#xff…

Spring Boot中 CommandLineRunner 与 ApplicationRunner作用、区别

CommandLineRunner 和 ApplicationRunner 是 Spring Boot 提供的两种用于在应用程序启动后执行初始化代码的机制。这两种接口允许你在 Spring 应用上下文完全启动后执行一些自定义的代码&#xff0c;通常用于执行一次性初始化任务&#xff0c;如数据库预填充、缓存预热等。 Co…

基于Vue.js的电商前端模板:Vue-Dashboard-Template的设计与实现

摘要 随着电子商务的飞速发展&#xff0c;前端页面的设计和实现变得愈发重要。本文介绍了一个基于Vue.js的电商前端模板——Vue-Dashboard-Template&#xff0c;旨在提供一个高性能、易扩展的电商平台前端解决方案。该模板遵循响应式设计、模块化、组件化开发等设计原则&#…

Python面试宝典第1题:两数之和

题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;找出数组中和为目标值的两个数的索引。可以假设每个输入只对应唯一的答案&#xff0c;且同样的元素不能被重复利用。比如&#xff1a;给定 nums [2, 7, 11, 15] 和 target 9&#xff0c;返回 [0, 1]&#xff0c;因…

c++指针和引用之高难度(一)习题讲解

1.【单选题】 int a { 5000 }; int* ptrA { &a }; a; *ptrA ? A 5000 B 5001 C 5002 解析&#xff1a;ptrA是指向变量a的内存地址&#xff0c;变量a&#xff0c;解引用ptrA的值也会变化&#xff0c;结果为5001。 2.【单选题】 int a { 5000 }; c…

Python爬虫开发实战,模拟登录与验证码处理

在Python爬虫的开发过程中,模拟登录和验证码处理是两个重要的环节。模拟登录可以帮助我们获取需要用户身份认证才能访问的数据,而验证码处理则是绕过网站反爬虫机制的关键步骤。本文将从实战角度出发,详细阐述Python爬虫中模拟登录和验证码处理的技术和策略。 一、模拟登录 …

axios二次封装(详细+跨域问题)

一&#xff0c;为什么要对axios进行二次封装&#xff1f;答&#xff1a;主要是要用到请求拦截器和响应拦截器;请求拦截器&#xff1a;可以在发请求之前可以处理一些业务响应拦截器&#xff1a;当服务器数据返回以后&#xff0c;可以处理一些事情 二&#xff0c;axios的二次封装…

WebSocket 心跳机制如何实现

是一种简单并且有效的策略&#xff0c;用于维持长链接的活跃状态&#xff0c;防止因为网络空闲或者不稳定因素&#xff0c;导致链接意外中断。通过周期性的心跳消息&#xff0c;确保了链接的持久性和周期性&#xff0c;是维持实时通信服务稳定运行的关键组件。 1. 定时发送心跳…

解决VSCode无法用ssh连接远程服务器的问题

原因&#xff1a; 因为windows自带的ssh无法连接远程服务器&#xff0c;需要用git底下的ssh.exe。 搜了很久&#xff0c;试过很多方法&#xff0c;包括替换掉环境变量中的ssh&#xff0c;但是都无效&#xff0c;最后发现是要在VSCode中配置需要使用哪个ssh.exe。 步骤&#…

Java学习 - 布隆过滤器

前置需求 需求 已经有50亿个电话号码&#xff0c;现在给出10万个电话号码&#xff0c;如何快速准确地判断这些电话号码是否已经存在&#xff1f; 参考方案 通过数据库查询&#xff1a;比如MySQL&#xff0c;性能不行&#xff0c;速度太慢将数据先放进内存&#xff1a;50亿*8字…

【环境配置】ubuntu中 Docker的安装

前言 Docker的使用&#xff0c;一直没有系统的梳理和记录&#xff0c;刚好最近看视频又再次的全面介绍到docker。于是记录下方便后面自己的使用&#xff0c;毕竟安装过程中还是会存在小的不丝滑。 1 Docker的简单介绍 这里的介绍来自于大模型的问答&#xff08;LLM时代的到来&a…