• 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

  • 相关阅读:
    StructuredStreaming整合Kafka
    StructuredStreaming-Sink
    ValueError: max() arg is an empty sequence
    StructuredStreaming
    学习进度报告08
    SparkSQL+Hive
    SparkSQL花式查询
    RDD-DF-DS相互转换
    SparkSQL学习
    学习进度报告07
  • 原文地址:https://www.cnblogs.com/Steven5007/p/10238953.html
Copyright © 2020-2023  润新知