9.23

昨天上JAVA课学习了浮点数算不准的问题,在Java中,浮点数并非用整数那样的补码直接表示,而是用符号位、指数位和尾数位“拼接”数值,这本质是对实数的“科学计数法”编码,却也埋下了精度问题的种子,最直观的感受是“小数算不准”:比如0.1 + 0.2不等于0.3,反而得到0.30000000000000004。根源在于,像0.1这样的十进制小数,在二进制中是无限循环小数,而Java浮点数的尾数位长度有限,只能截取部分二进制位存储,这就像用有限位数的十进制小数去表示1/3(0.333...),必然存在误差。这种精度问题并非Java的缺陷,而是二进制浮点数的“先天属性”。日常开发中,若要处理货币、精确计量等场景,直接用double计算就可能踩坑,此时更适合用字符串来存储数值,从根本上规避了二进制带来的误差。

posted @ 2025-09-23 18:40  姜乐融  阅读(13)  评论(0)    收藏  举报