【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]);
	}
相关推荐
考虑考虑1 分钟前
Excel导入时产生特殊字符处理
java·后端·java ee
90后小陈老师7 分钟前
PHP 配置默认值失效排查实录:isset 兜底遇上表单空串回填,首页文案是怎么集体消失的
开发语言·php
Scabbards_21 分钟前
面试Leetcode - Heap 堆
java·leetcode·面试
程序员清风1 小时前
专业再升级!程序员专属显示器明基RD280UG上手实测!
java·后端·面试
JJJennie7771 小时前
Gemini 3.7 Flash 上线,Google 想让 AI 多干活
开发语言·javascript·ecmascript
wuyk5552 小时前
Python 第三章:列表 List
服务器·开发语言·python
Evand J2 小时前
【MATLAB例程,车联网7】CACC网联车辆协同控制:ACC对比、V2X时延丢包与队列稳定性,附例程下载链接
开发语言·matlab·车联网
Lam Tang3 小时前
APS 系列文章 08
java·代理模式
要努力点3 小时前
Python入门第六课
开发语言·python
萧瑟余晖3 小时前
Java深入解析篇三十三之消息队列
java·开发语言