Java 扩展知识深度解析
Java 扩展知识深度解析一、BigDecimal1.1 ⭐底层原理精度丢失问题Double 是因为转换为二进制数的时候发生了截断,所以会产生精度丢失,如果涉及到金融方面的操作,建议使用没有精度丢失的 BigDecimal 其实如果没有用好 BigDecimal 其实还是会产生精度丢失,比如在阿里巴巴开发规范中就提到了我们 BigDecimal 的构造函数中传入 Double 基本类型的数据时,会有精度缺失问题,正确的使用方法应该是传入 String 对象 BigDecimal 实现原理原理的话,主要是将原来的小数扩大为整数,其中 intCompact 存储扩大后的整数,scale 存储小数点后的位数,precision 存储值的有效位数,而不是使用浮点型的科学计数法 总结double 产生精度丢失的根本原因是它采用 IEEE 754 的二进制浮点数表示,很多十进制小数在二进制中无法精确表示,只能近似存储,因此在运算过程中会产生精度误差。 在金融等精度敏感场景中通常使用 BigDecimal,因为 BigDecimal 使用的是十进制定点数模型,通过将小数放大为整数进行计算,内部...