java float double精度为什么会丢失
展开全部
这个不是java的问题,是二进制存储小数的问题,其他语言一样会存在。
考虑下二进制是如何存储小数的:
0.1是1/2
0.01是1/4
0.001是1/8
0.0....01(n位)是2^-n
二进制只能精确表示2的-n次方的整数倍小数
很明显这样是不能精确表示所有小数的,因此在存储的过程中就会丢失精度,比如x=0.3
其实这个丢失精度只是相对十进制而言的,十进制同样不能精确表示所有小数,例如1/3......
要精确地进行计算,请使用BigDecimal,并在计算时约束好小数位(比如精确到2位小数)。
float double只能用于科学计算。
考虑下二进制是如何存储小数的:
0.1是1/2
0.01是1/4
0.001是1/8
0.0....01(n位)是2^-n
二进制只能精确表示2的-n次方的整数倍小数
很明显这样是不能精确表示所有小数的,因此在存储的过程中就会丢失精度,比如x=0.3
其实这个丢失精度只是相对十进制而言的,十进制同样不能精确表示所有小数,例如1/3......
要精确地进行计算,请使用BigDecimal,并在计算时约束好小数位(比如精确到2位小数)。
float double只能用于科学计算。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询