【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]);
	}
相关推荐
黒亱中旳6 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring
网络工程小王6 小时前
[智能对话系统架构设计文档]
java·系统架构·langraph
alxraves6 小时前
医用超声远程会诊系统:会诊平台的核心架构与功能解析
java·人工智能·架构
带刺的坐椅6 小时前
用 Solon AI ReActAgent 落地智能客服工单处理
java·ai·llm·agent·solon·react-agent
我是坏垠7 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant7 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_7 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
你怎么知道我是队长8 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
xingke8 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件
戮漠summer8 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala