阿里Java开发手册阅读笔记3
1. 任何货币金额,均以最小货币单位且整型类型来存储
之前看过一个外卖平台的Java项目,里面记录金额的时候会存在小数点后两位,总所周知如果使用Java中的浮点型来存储计算会存在严重的精度丢失问题,0.3-0.1的结果也未必是你想象的那样,所以在后端代码中一律使用整型放大百倍,最后到前端显示的时候再由前端处理小数点的问题。
2. 浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals来判断
根据手册中的说明:浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式,二进制无法精确表示大部分的十进制小数。
正确的使用方式应该如下:
float a = 10f-0.9f; float b = 0.9f-0.8f; float diff = 1e-6f; if (Math.abs(a-b) < diff ) { ..... }
指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的。