zoukankan      html  css  js  c++  java
  • BigDecimal加减乘除

    import java.math.BigDecimal;
    
    public class Testmath {
         public static void main(String[] args) { 
                 String str1="2.30";
                BigDecimal bd=new BigDecimal(str1);
                System.out.println("字符串转BigDecimal:"+bd);
                
                BigDecimal num1 = new BigDecimal("100.68889");  
                BigDecimal num2 = new BigDecimal("2.5");  
                
                //加法
                BigDecimal result1 = num1.add(num2);
                System.out.println("和    是   :  " + result1);
                
                //减法 
                BigDecimal result2 = num1.subtract(num2);
                System.out.println("差    是   :  " + result2);
                
                //乘法
                BigDecimal result3 = num1.multiply(num2);
                System.out.println("积    是   :  " + result3);
                
                //除法
                BigDecimal result4 = num1.divide(num2);
                System.out.println("商    是   :  "+result4);
        
         }
    }

    结果:

    ===============================================

    注意:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

    JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。

      BigDecimal result4 = num1.divide(num2,2,BigDecimal.ROUND_HALF_UP);

    注意这个divide方法有两个重载的方法,一个是传两个参数的,一个是传三个参数的:

    两个参数的方法:

    @param divisor value by which this {@code BigDecimal} is to be divided. 传入除数

    @param roundingMode rounding mode to apply. 传入round的模式

    三个参数的方法:

    @param divisor value by which this {@code BigDecimal} is to be divided. 传入除数
    @param scale scale of the {@code BigDecimal} quotient to be returned. 传入精度
    @param roundingMode rounding mode to apply. 传入round的模式

    ※ 注意:

    1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。

    2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!

    因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。
    相关链接 : https://blog.csdn.net/haiyinshushe/article/details/82721234

    ===========

    相关链接:https://www.cnblogs.com/LeoBoy/p/5897754.html

  • 相关阅读:
    C# Split() 去除 分组
    C#获取当前路径的7种方法
    给 C# 开发者的代码审查清单
    【知乎】一句话答案收录集,一句足矣
    C# string和byte[]的转换
    WCF 有零个操作;协定必须至少有一个操作
    WPF中动态改变控件显示位置
    转 将iPhone和Android手机屏幕投影仪投影显示
    转 MySQL数据库监控软件lepus使用问题以及解决办法
    转 Shell中的IFS解惑
  • 原文地址:https://www.cnblogs.com/Steven5007/p/10238953.html
Copyright © 2011-2022 走看看