前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java.lang.ArithmeticException解决方案

java.lang.ArithmeticException解决方案

原创
作者头像
疯狂的KK
发布2024-01-10 19:05:04
1890
发布2024-01-10 19:05:04
举报
文章被收录于专栏:Java项目实战Java项目实战

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result这个异常意思是算术运算结果为一个无限小数,无法准确表示为确定的十进制数字。

这通常出现在以下几种情况:

1. 十进制除法的结果是一个循环小数,比如1/3。

2. 开根运算的结果是一个无理数,比如开二。

3. 其他一些数字运算结果无法精确表示为有限长度的十进制数字。

代码语言:java
复制
import java.math.BigDecimal;

public class Demo {

    public static void main(String[] args) {
        // 参数为两个可能产生循环小数的数字       
        BigDecimal a = new BigDecimal("1");
        BigDecimal b = new BigDecimal("3");
        
        try {
            // 使用BigDecimal运算
            BigDecimal result = a.divide(b);
            System.out.println(result); 
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
    }
}

解决这个异常的一些方法:

1. 使用BigDecimal来表示浮点数,避免精度损失问题。

2. 取出有效小数点后几位即可,比如1/3取3为0.333333。

3. 使用近似值来替代无理数,比如开二取1.41421356237309504880。

4. 把精度要求降低,只判断结果是否接近预期值即可。

5. 使用其他进制系统如八进制来表示,改变进制可能可以精确表示。

6. 把计算过程改为整数处理,避免出现无理数情况。

7. 直接捕获异常,忽略精度问题继续后续流程。

代码语言:java
复制
public class Demo {

    public static void main(String[] args) {
        double result = Math.sqrt(2);
        try {
            System.out.println(result);
        } catch (ArithmeticException e) {
            // 取近似值处理
            result = 1.4142135623730950488016887;  
            System.out.println(result);
        }
    }
}

一般来说,通过BigDecimal或舍入有效位来处理小数,以及选择使用近似值,是很好的解决此异常的常用方法。

代码语言:java
复制
import java.math.BigDecimal;

public class BigDecimalExample {

  public static void main(String[] args) {
    
    // 定义可能产生循环小数的值,使用BigDecimal包装
    BigDecimal a = new BigDecimal("1");
    BigDecimal b = new BigDecimal("3");

    try {
      // 使用BigDecimal的divide方法进行除法运算
      BigDecimal result = a.divide(b, 2, BigDecimal.ROUND_HALF_UP);  

      System.out.println("运算结果为: " + result);

    } catch (ArithmeticException e) {
      e.printStackTrace();
    }
  }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档