gpt4 book ai didi

java中double类型运算结果异常的解决方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java中double类型运算结果异常的解决方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

问题:

对两个double类型的值进行运算,有时会出现结果值异常的问题。比如:

java" id="highlighter_838968">
?
1
2
3
4
System.out.println( 19.99 + 20 );
   System.out.println( 1.0 - 0.66 );
   System.out.println( 0.033 * 100 );
   System.out.println( 12.3 / 100 );

输出:

39.989999999999995 0.33999999999999997 3.3000000000000003 0.12300000000000001 。

解决方法:

Java中的简单浮点数类型float和double不能够进行运算,因为大多数情况下是正常的,但是偶尔会出现如上所示的问题。这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制转化为十进制浮点数时,精度容易丢失,导致精度下降.

要保证精度就要使用BigDecimal类,而且不能直接从double直接转BigDecimal,要将double转string再转BigDecimal。也就是不能使用BigDecimal(double val) 方法,你会发现没有效果。要使用BigDecimal(String val) 方法。具体例子如下所示.

double类型四则运算例子:

1、相加 。

?
1
2
3
4
5
public static double add( double a1, double b1) {
    BigDecimal a2 = new BigDecimal(Double.toString(a1));
    BigDecimal b2 = new BigDecimal(Double.toString(b1));
    return a2.add(b2).doubleValue();
   }

2、相减 。

?
1
2
3
4
5
public static double sub( double a1, double b1) {
    BigDecimal a2 = new BigDecimal(Double.toString(a1));
    BigDecimal b2 = new BigDecimal(Double.toString(b1));
    return a2.subtract(b2).doubleValue();
   }

3、相乘 。

?
1
2
3
4
5
public static double mul( double a1, double b1) {
    BigDecimal a2 = new BigDecimal(Double.toString(a1));
    BigDecimal b2 = new BigDecimal(Double.toString(b1));
    return a2.multiply(b2).doubleValue();
   }

4、相除 。

?
1
2
3
4
5
6
7
8
public static double div( double a1, double b1, int scale) {
   if (scale < 0 ) {
    throw new IllegalArgumentException( "error" );
   }
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }

scale参数为除不尽时,指定精度.

以上这篇java中double类型运算结果异常的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

最后此篇关于java中double类型运算结果异常的解决方法的文章就讲到这里了,如果你想了解更多关于java中double类型运算结果异常的解决方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com