Java Double运算精度问题解决
2018-02-07 15:55
645 查看
Double精度丢失原因
先明白计算机在内部进行算术运算的一个流程:计算机会先把要计算的数转化成二进制,然后通过二进制进行运算,运算好了之后,再转化为相应的进制输出。然而,Double类型小数在转化成计算机的二进制的时候,二进制不能完全表示某些小数,就好像10进制中也会出现无限小数一样,因而就造成了精度的丢失,所以运算完成后结果是错误的。解决办法
import java.math.BigDecimal; import java.math.RoundingMode; /** * 解决Double运算精度问题 * @title DoubleUtils.java * @date 2018年2月1日 * */ public class DoubleUtils { /** * @title 解决double加法精度问题 */ public static double add(Double... doubles){ BigDecimal result = new BigDecimal(0); for(Double a : doubles){ result = result.add(new BigDecimal(String.valueOf(a))); } return result.doubleValue(); } /** * @title 解决double乘法精度问题 */ public static double multiply(Double... doubles){ BigDecimal result = new BigDecimal(1); for(Double a : doubles){ result = result.multiply(new BigDecimal(String.valueOf(a))); } return result.doubleValue(); } /** * @title 解决double除法精度问题 * @param dividend 被除数 * @param divisor 除数 * @param scale 保留小数位数 * @param roundingMode 小数保留模式 */ public static double divide(Double dividend,Double divisor,int scale,RoundingMode roundingMode){ BigDecimal result = new BigDecimal(0); result = new BigDecimal(String.valueOf(dividend)).divide(new BigDecimal(String.valueOf(divisor)), scale, roundingMode); return result.doubleValue(); } /** * @title 解决double减法精度问题 * @param minuend 被减数 * @param subtractor 减数 */ public static double subtract(Double minuend,Double subtractor){ return new BigDecimal(String.valueOf(minuend)) .subtract(new BigDecimal(String.valueOf(subtractor))) .doubleValue(); } }
相关文章推荐
- java 解决double运算精度问题(使用BigDecimal )
- java 解决double运算精度问题(使用BigDecimal )
- java解决double和float精度不准确的问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 第2章 Java编程基础——FAQ2.10 如何解决double和float精度不准的问题?
- Java中如何解决double和float精度不准的问题
- Java中运算精度的问题(double与BigDecimal)
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题(转)
- java.math.BigDecimal类的用法 解决double计算精度问题
- 关于java中Double类型的运算精度问题
- Java中如何解决double和float精度不准的问题
- java浮点运算精度问题的解决
- 关于 java 中 Double 类型的运算精度问题
- 解决double类型运算时精度丢失问题
- java中Double类型的运算精度丢失的问题