float 单精度浮点数,在机内占4个字节,有效数字8位。
double 双精度浮点数,在机内占8个字节,有效数字16位。
float 和 double都是浮点数,都有取值范围, 都有精度范围。 因此会经常出现下面问题,定义了一个浮点数,经过一系列的计算, 它本来应该等于某个确定值,但实际上并不是。。。???
计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。float / double相减会转换成二进制,因float有效数字8位, double有效位数为16位,这就会出现存储小数位数不够的情况,这种情况下就会出现误差,解决方法就是使用BigDecimal,它的有效长度足够长,因此可代替float / double来进行加减乘除。
金融相关的开发中,金额必须是完全精确的计算,double 和 float 提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值,这就导致了你看到的不正确的结果,故不能使用double或者float,而应该采用java.math.BigDecimal。
BigDecimal可以表示任意精度的小数,并对它们进行计算。但要慎用使用 BigDecimal(double) 构造函数,因为它会在计算的过程中产生舍入误差。建议使用基于整数或 String 的构造函数来创建BigDecimal对象。
public class Test {
private static final DecimalFormat DECIFMT = ne

在金融计算中,由于float和double在进行二进制转换和运算时可能出现精度不足的问题,可能导致计算结果的误差。BigDecimal作为高精度数值类型,能够提供精确的计算结果,适合用于金额等需要精确计算的场景。尽管double和float运算速度快,但它们不能准确表示某些十进制数字,而BigDecimal通过避免这种舍入误差,确保了计算的准确性。因此,推荐在金融相关的开发中使用BigDecimal进行计算。
最低0.47元/天 解锁文章
165

被折叠的 条评论
为什么被折叠?



