【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]);
	}
相关推荐
Eliauk &几秒前
【docker】通过云服务器安转Docker
java·运维·服务器·spring cloud·docker·容器
liuliuliuliuyujie11 分钟前
在IDEA中如何创建web项目?——不使用Archetype
java
flying jiang14 分钟前
第六章 SqlSession 执行 Mapper 过程
java·spring·mybatis
yuvenhol17 分钟前
火山引擎大模型语音合成双向流式-python demo
开发语言·python·火山引擎
奈李喔17 分钟前
SpringBoot集成MyBatis-Plus
java·spring boot·mybatis
~在杰难逃~25 分钟前
Day15笔记-函数返回值&函数的封装&匿名函数
开发语言·笔记·python·pycharm·数据分析
问道飞鱼33 分钟前
springboot后端开发-常见注解及其用途
java·spring boot·后端
Good kid.41 分钟前
王者荣耀改重复名(java源码)
java·开发语言
奶糖趣多多44 分钟前
类的继承性和多态性
java·开发语言
图像处理大大大大大牛啊1 小时前
使用mingw64 编译 QT开发流程
开发语言·c++·qt·命令模式