【Java-解决精度丢失】

浮点数为什么会精度丢失?

我们在程序中所写的值都是使用十进制的形式,但是计算机使用的是二进制。当计算机进行运算时会将十进制转换为二进制,再进行运算。

而浮点数的小数位在转换二进制时可能产生无序循环的情况,这时计算机会取近似值就造成了精度丢失。

如何解决?

当使用场景对精度要求高时,可以使用BigDecimal来解决浮点数精度丢失问题。

例子运用理解:

java 复制代码
public static void main(String[] args) {
		// 解决浮点数精度丢失(小数位数在计算时可能产生循环)
		BigDecimal dec1 = new BigDecimal("0.2");
		BigDecimal dec2 = new BigDecimal("0.1");
		
		System.out.printf("%f+%f=%f\n", dec1, dec2, dec1.add(dec2));
		System.out.printf("%f-%f=%f\n", dec1, dec2, dec1.subtract(dec2));
		System.out.printf("%fx%f=%f\n", dec1, dec2, dec1.multiply(dec2));
		// 除法除不尽,需要选择保留形式
		System.out.printf("%f÷%f=%f\n", dec1, dec2, dec1.divide(dec2, 10, RoundingMode.CEILING));
		// 除数+取余
		BigDecimal[] ret = 
		dec1.divideAndRemainder(dec2);
		System.out.println("商:" + ret[0]);
		System.out.println("余数:" + ret[1]);
	}
相关推荐
帅次3 分钟前
Kotlin Flow 与 StateFlow:UI 单向数据流基础
开发语言·ui·kotlin·stateflow·onlifecycle
唠点键盘之外的17 分钟前
10 Spring Boot + 大模型:Java 项目接入 AI 的三种姿势
java·spring boot·aigc·cursor
NWU_LK18 分钟前
【WebFlux】第五篇 —— 两种编程模型与 WebClient
java
艾伦野鸽ggg19 分钟前
JavaScript 浏览器本地存储
开发语言·javascript·ecmascript
增量星球19 分钟前
《持续交付2.0系列六》业务需求协作管理
java·运维·自动化·devops·持续部署·持续集成
重生之我是Java开发战士35 分钟前
【Java EE】Spring IoC 与 DI
java·spring·java-ee
SimonKing1 小时前
阿里要求全员卸载 Claude Code:事件始末与深层逻辑
java·后端·程序员
云烟成雨TD1 小时前
Agent Scope Java 2.x 系列【42】2.0 GA 正式发布:从透明开发迈向智能体系统工程
java·人工智能·agent
AOwhisky1 小时前
Python 学习笔记(第十一期)——运维自动化(上·后篇):进程级监控与子进程管理——psutil进阶
运维·开发语言·python·学习·云原生·运维开发
猫猫不是喵喵.1 小时前
SpringBoot自动装配原理
java·spring boot·后端