浮点数运算不精确的问题解决和注意事项(BigDecimal)

news2024/10/1 5:38:58

总结:浮点数运算不精确的问题本质上是在存储的时候就不精确,这个问题会持续到即使使用到专业的工具类BigDecimal来使用时,如果仅仅只是传double类型做入参时依然会导致运算不精确,所以即使在使用BigDecimal工具类进行构造时也要使用String类型的构造函数,尽量避免使用double类型的构造函数

在使用普通的double数据类型进行存值并进行运算时,会造成数据不精确的问题,所以会用到BigDecimal,记录一下使用过程中遇到的问题解决和注意事项

首先到API手册查看BigDecimal类的介绍以及使用(构造方法)

这四个方法一眼就能看出来用法

使用double类型为入参的

  • BigDecimal(double val)

构造方法,在idea中测试

 即new一个BigDecimal,传入一个double类型入参即可,下面来做加减乘除运算

加减乘除四个方法都是以一个BigDecimal调方法并传另一个BigDecimal即可返回结果,加减乘除四个方法分别是

add(BigDecimal augend)

subtract (BigDecimal augend)

multiply(BigDecimal augend)

divide(BigDecimal augend)

 下面加减乘法运算居然更不精确了,并且除法运算偶尔还报错了,因为在实例化BigDecimal工具类时,仅仅只是传double类型做入参时依然会导致运算不精确,所以即使在使用BigDecimal工具类进行构造时也要使用String类型的构造函数,尽量避免使用double类型的构造函数。这里在double数后面拼接一个空字符串再测试:

可以看到加减乘法都可以正常运算了,但除法还是报错,这里来看一下报错信息

非终止十进制展开;没有精确可表示的十进制结果。

ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result 

 算数异常                :非终止十进制展开                          ;没有精确可表示的十进制结果。

很明显出现了除不尽的问题,这里需要使用divide方法的重载方法,有三个参数,第一个是被除数,二参为保留小数位数,三餐为舍入方式,(ROUND_HALF_UP表示四舍五入方法)

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

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

相关文章

论文浅尝 | Knowledge Graph Contrastive Learning for Recommendation

笔记整理:刘尧锟,天津大学硕士链接:https://arxiv.org/pdf/2205.00976.pdf动机知识图谱已被用作有用的辅助信息来提高推荐质量。在这些推荐系统中,知识图谱信息通常包含丰富的事实和项目之间的内在语义相关性。然而,此…

Python源码学习新手攻略

Python源码学习是许多编程初学者在学习Python过程中十分重要的一个必经步骤,不仅如此,一些有一定开发经验的程序员想要提升自身,也常常需要阅读并学习优秀核心技术栈的源码。那么我们应该如何开始Python源码学习呢?下面小编就来和…

自学Web前端开发学习讲解 – 入门篇

很多人都对web前端感兴趣,这一期主要聊关于如何入门学习Web前端开发的过程分享,此篇适合想入门初学者,大佬就不用看了。主要内容是以本人这一路自学web前端的一些经验和建议,学习哪些知识,以及如何正确的去学&#xff…

AI绘画火爆,到现在还只是冰山一角?AIGC掀起当代新艺术浪潮

前言: hello,大家好我是Dream。近日,各大社交平台掀起了一股“AI绘图”风潮,很多同学朋友纷纷在社交平台上晒出了属于自己的AI照片,一时间AI相关话题热度高涨。那对于AI绘画以及开启AI内容创作新时代的昆仑万维你究竟了…

东北大学2023分布式操作系统考试题目及答案

Note:答案仅供参考,自己所写,不是标准答案,若发现错误,请指正,谢谢! 文章目录考试题目参考答案考试题目 1、简述分布式系统的设计目标中开放性的特点有哪些? 、 、 、 、 、 、 、…

​燕东微科创板上市:市值276亿 亦庄国投与京东方是股东

雷递网 雷建平 12月16日北京燕东微电子股份有限公司(简称:“燕东微”,股票代码为:“688172”)今日在科创板上市,燕东微本次发行17986.5617万股,发行价21.98元,募资总额39.56亿元。燕…

关于hcaptcha (vm wasm ob)三合一

该文章主要提供交流学习使用,请勿利用其进行不当行为! 如本篇文章侵犯了贵公司的隐私,请联系我立刻删除! 如因滥用解密技术而产生的风险与本人无关! 1 Hcaptcha hCaptcha 旨在解决机器学习中最劳动密集型的问题&am…

毕业设计 - 基于 java web的网上花店销售系统设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计数据流图功能模块2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 毕业设计项目: 网上花店销售系统的设计与实现 一、项目设计 1. 模块设计 数据流图 功能模块 1、首页(主界面) 提供简洁美观的主界…

Jenkins+Kubernetes企业级DevOps容器云平台

一、Kubernetes在DevOps中的作用 1、DevOps DevOps假导所有新的功能特性可以像流动的水一样,迭代到用户的终端,而水是不能讲流的,为了保证水流的质量,我们就必须在水流动的途中治理,直到最终交付到用户的手中。 DevOps是一套方法论、一系列的原则和实践,其主要目标为帮…

【Robot Framework】发送GET和POST请求

做接口自动化时,经常要使用GET与POST请求,那么如何使用RF发送对应的请求呢? 一、安装RequestsLibrary pip install robotframework-requests安装以后,导入到对应的测试套件或测试用例中. 本次主要介绍通过RequestsLibrary来实现…

JavaEE - JVM八股文(JVM内存区域划分,典型面试题,JVM类加载机制)

文章目录1. JVM运行时数据区(内存区域划分)2. JVM类加载机制常见面试题1. JVM运行时数据区(内存区域划分) JVM运行时数据区域也叫内存布局,但需要注意的时它和Java内存模型(JMM)不同&#xff0…

使用PyTorch进行知识蒸馏的代码示例

随着机器学习模型的复杂性和能力不断增加。提高大型复杂模型在小数据集性能的一种有效技术是知识蒸馏,它包括训练一个更小、更有效的模型来模仿一个更大的“教师”模型的行为。 在本文中,我们将探索知识蒸馏的概念,以及如何在PyTorch中实现它…

计算机毕设Python+Vue校园舆情监控系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C#修改富文本框(RichTextBox)指定内容颜色

1.前言 最近给客户做了一个协议解包与组包的工具,以便于他们给终端客户或者集成商使用,让客户能够快速集成产品协议,降低客户集成工作量,产品协议是基于JT/T808,但是有增加了自己的一些特殊修改。 客户使用的是C#开发…

数据库原理及MySQL应用 | 并发控制

无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制问题,MySQL通过多版本并发控制和加锁实现并发控制。 多用户并发执行事务访问同一个数据库时,可能引发脏写、脏读、不可重复读、幻读等一致性问题。并发事务访问相同记录的情况&#xff0…

Golang 【basic_leaming】数组

阅读目录Array(数组)数组定义数组的初始化方法一方法二方法三数组的遍历数组是值类型多维数组二维数组的定义二维数组的遍历数组练习题1、请求出一个数组的和以及平均值 for-range2、请求出一个数组的最大值,并得到对应的下标3、从数组 [1, 3, 5, 7, 8] 中找出和为 …

探花交友_第10章_搭建后台系统(新版)

探花交友_第10章_搭建后台系统(新版) 文章目录探花交友_第10章_搭建后台系统(新版)1.1 概述1.2 API网关1.2.1 搭建网关依赖引导类跨域问题配置类配置文件测试1.2.2 配置鉴权管理器1.3 Nacos配置中心1.3.1 添加依赖1.3.2 添加boots…

33.数据统计

数据统计 后台系统首页中,显示各种统计数据,比如:累计用户数、新增用户数、登录次数等内容。 解决方案 数据库表分析 一、数据采集 需求: 1、探花系统将用户操作日志写入RabbitMQ 2、管理后台获取最新消息,构造日…

SpringBoot+微信小程序实现的云音乐小程序系统 附带详细运行指导视频

文章目录一、项目演示二、项目介绍三、项目运行截图四、主要代码一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBoot微信小程序框架开发的云音乐微信小程序系统。首先,这是一个前后端分离的项目&#xff…

C语言百日刷题第十五天

前言 今天是刷题第15天,放弃不难,但坚持一定很酷~ 再刷一套模拟题 C语言百日刷题第十五天前言一、选择题二、判断题三、多选题四、填空题五、分析程序题一、选择题 1.下列选项中,不属于开发一个C语言应用程序的具体实现步骤的是&#xf…