Java中精度丢失问题原因及解决办法

在Java开发过程中我们有时会遇到一些有必要的运算,而一些项目尤其是金融相关的项目就对这些运算的精度要求较高。那么为什么会出现精度丢失这种情况,我们又该如何解决这种问题呢?

原因:首先计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。Float和Double提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值,这就导致了在后来的运算会出现不正确结果的情况。

解决办法:Java提供了BigDecimal方法。具体用法如下(假设传入和设置的值的类型均为Double):

import java.math.BigDecimal;

public class Test{
	public Test(){	
	}
	public static double multiply(double v1,double v2){
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		BigDecimal b3 = b1.multiply(b2);//此处举例使用乘法(注意:必须使用一个新的BigDecimal来获得运算后的值)
		Double b4 = b3.doubleValue();
		return b4;//可直接使用这个值,set、输出都可以(部分步骤可简化)
	}
}


猜你喜欢

转载自blog.csdn.net/fun7646/article/details/80278093