【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]);
	}
相关推荐
你是理想几秒前
wait 和notify ,notifyAll,sleep
java·开发语言·jvm
pingxiaozhao8 分钟前
在Ubuntu内网环境中为Gogs配置HTTPS访问(通过Apache反向代理使用IP地址)
ubuntu·https·apache
helloworld工程师15 分钟前
【微服务】SpringBoot整合LangChain4j 操作AI大模型实战详解
java·eclipse·tomcat·maven
Java&Develop16 分钟前
idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊
java·ide·intellij-idea
forestsea19 分钟前
Python进阶编程总结
开发语言·python·notepad++
q5673152334 分钟前
使用Java的HttpClient实现文件下载器
java·开发语言·爬虫·scrapy
SeaTunnel1 小时前
【同步教程】基于Apache SeaTunnel从MySQL同步到MySQL——Demo方舟计划
大数据·人工智能·apache·etl
你们补药再卷啦1 小时前
不用额外下载jar包,idea快速查看使用的组件源码
java·ide·intellij-idea
六bring个六1 小时前
QT上位机笔记
开发语言·笔记·qt
步木木1 小时前
Qt 5.14.2入门(一)写个Hello Qt!程序
开发语言·qt