divide⽅法_java中double类型数据加减操作精度丢失问题及解
决⽅法
double类型数据加减操作精度丢失问题
今天在项⽬中⽤到double类型数据加减运算时,遇到了⼀个奇怪的问题,⽐如1+20.2+300.03,理论上结果应该是321.23,其实结果并不是这样。
public double add() {
double number1 = 1;
double number2 = 20.2;
double number3 = 300.03;
double result = number1 + number2 + number3;
System.out.println(result);
return result;
}
打印结果如下:
这是为什么呢?⼜该如何解决呢?
在使⽤Java中double 进⾏运算时,经常出现精度丢失的问题,总是在⼀个正确的结果左右偏0.0000**1。float和double只能⽤来做科学计算或者是⼯程计算,在商业计算中我们要⽤ java.math.BigDecimal。BigDecimal⼀共有4个够造⽅法,我们只考虑两个进⾏⽐较,分别是
BigDecimal
bigdecimal格式化两位小数上⾯的API简要描述相当的明确,⽽且通常情况下,上⾯的那⼀个使⽤起来要⽅便⼀些。我们可能想都不想就⽤上了,会有什么问题呢?
现贴出BigDecimal的⼀个构造函数的⽂档供⼤家参考
解决⽅法
相信从上⾯的⽂档⼤家也已经出了解决⽅法,在需要精确的表⽰两位⼩数时我们需要把他们转换为BigDecimal对象,然后再进⾏运算。
另外需要注意,使⽤BigDecimal(double val)构造函数时仍会存在精度丢失问题,建议使⽤BigDecimal(String val)。这就需要先把double转换为字符串然后在作为BigDecimal(String val)构造函数的参数。转换为BigDecimal对象之后再进⾏加减乘除操作,这样精度就不会出现问题了。这也是为什么有关⾦钱数据存储都使⽤BigDecimal。
/**
验证⽂章开头提到的问题是否解决,
public
打印结果值
跟预想中的结果值⼀样,解决了double类型数据加减操作时精度丢失的问题。
————————————————
版权声明:本⽂为CSDN博主「晨光Jason」的原创⽂章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原⽂出处链接及本声明。原⽂链接:java中double类型数据加减操作精度丢失问题及解决⽅法_Java_奋⽃在坚持的路上-CSDN博客
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论