【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 分钟前
ES 精准匹配 和 模糊查询的实现方式
java·开发语言
Z***258014 分钟前
Java计算机视觉
java·开发语言·计算机视觉
Tiger_shl22 分钟前
SqlConnection、SqlCommand 和 SqlDataAdapter
开发语言·数据库·c#
一点事22 分钟前
ruoyi:集成mybatisplus实现mybatis增强
java·开发语言·mybatis
e***877024 分钟前
Tomcat Request Cookie 丢失问题
java·tomcat·firefox
你的冰西瓜28 分钟前
C++14 新特性详解:相较于 C++11 的主要改进
开发语言·c++·stl
linksinke29 分钟前
Mapstruct引发的 Caused by: java.lang.NumberFormatException: For input string: ““
java·开发语言·exception·mapstruct·numberformat·不能为空
无限进步_36 分钟前
C语言单向链表实现详解:从基础操作到完整测试
c语言·开发语言·数据结构·c++·算法·链表·visual studio
likuolei1 小时前
Eclipse 代码模板
java·ide·eclipse
好好研究1 小时前
SpringMVC框架 - 异常处理
java·开发语言·spring·mvc