首页 > 其他分享 >BigDecimal

BigDecimal

时间:2024-11-15 22:40:33浏览次数:1  
标签:BigDecimal valueOf System println public out

不精确的情况:

public class BigDecimalDemo1 {
    public static void main(String[] args) {
        System.out.println(0.09 + 0.01);   // 0.09999999999999999
        System.out.println(0.216 - 0.1);   // 0.11599999999999999
        System.out.println(0.226 * 0.01);  // 0.0022600000000000003
        System.out.println(0.09 / 0.1);    // 0.8999999999999999
    }
}
图片名称

 

图片名称

BigDecimal 所在的包: java.math

图片名称

程序示例:

public class demo2 {
    public static void main(String[] args) {
        /*
            构造方法获取BigDecimal对象
            public BigDecimal(double val) public BigDecimal(string val)

            静态方法获取BigDecimal对象
            public static BigDecimal valuef(double val)
        */

        // 1.通过传递double类型的小数来创建对象
        // 细节:
        // 这种方式有可能是不精确的, 所以不建议使用
        BigDecimal bd1 = new BigDecimal(0.01);
        BigDecimal bd2 = new BigDecimal(0.09);

        System.out.println(bd1);  // 0.01000000000000000020816681711721685132943093776702880859375
        System.out.println(bd2);  // 0.0899999999999999966693309261245303787291049957275390625

        // 通过传递字符串表示的小数来创建对象
        BigDecimal bd3 = new BigDecimal("0.01");
        BigDecimal bd4 = new BigDecimal("0.09");
        BigDecimal bd5 = bd3.add(bd4);
        System.out.println(bd3);  // 0.01
        System.out.println(bd4);  // 0.09
        System.out.println(bd5);  // 0.10
    }
}

程序示例:

public class demo2 {
    public static void main(String[] args) {
        /*
            构造方法获取BigDecimal对象
            public BigDecimal(double val) public BigDecimal(string val)

            静态方法获取BigDecimal对象
            public static BigDecimal valuef(double val)
        */

        // 3.通过静态方法获取对象
        // 细节:
        // 1.如果要表示的数字不大, 没有超出double的取值范围, 建议使用静态方法
        // 2.如果要表示的数字比较大, 超出了double的取值范围, 建议使用构造方法
        // 3.如果我们传递的是0~10之间的整数, 包含0, 包含10, 那么方法会返回已经创建好的对象, 不会重新new
        BigDecimal bd6 = BigDecimal.valueOf(10.0);
        BigDecimal bd7 = BigDecimal.valueOf(10.0);
        System.out.println(bd6 == bd7);  // false

        BigDecimal bd66 = BigDecimal.valueOf(10);
        BigDecimal bd77 = BigDecimal.valueOf(10);
        System.out.println(bd66 == bd77);  // true
    }
}

参数为 double 的 valueOf() 方法:

图片名称

参数为 long 的 valueOf() 方法:

图片名称

查看 ZERO_THROUGH_TEN 数组:

图片名称

BigDecimal 的成员方法:

图片名称

程序示例:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class demo3 {
    public static void main(String[] args) {
         /*
            public BigDecimal add(BigDecimal val) 加法
            public BigDecimal subtract(BigDecimal val) 减法
            public BigDecimal multiply(BigDecimal val) 乘法
            public BigDecimal divide(BigDecimal val) 除法
            public BigDecimal divide(BigDecimal val, 精确几位, 舍入模式)除法
        */
        // 1.加法
        BigDecimal bd1 = BigDecimal.valueOf(10.);
        BigDecimal bd2 = BigDecimal.valueOf(3.0);
        BigDecimal bd3 = bd1.add(bd2);
        System.out.println(bd3);  // 12.0

        // 2.减法
        BigDecimal bd4 = bd1.subtract(bd2);
        System.out.println(bd4);  // 8.0

        // 3.乘法
        BigDecimal bd5 = bd1.multiply(bd2);
        System.out.println(bd5);  // 20.00

        // 4.除法
        BigDecimal bd6 = bd1.divide(bd2, 2, RoundingMode.HALF_UP);  // 四舍五入
        BigDecimal bd7 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP);
        System.out.println(bd6);  // 3.33
        System.out.println(bd7);  // 3.33
    }
}
图片名称 图片名称

用打断点的方式查看:

public class demo4 {
    public static void main(String[] args) {
        BigDecimal bd1 = BigDecimal.valueOf(0.226);
        BigDecimal bd2 = BigDecimal.valueOf(123.226);
        BigDecimal bd3 = BigDecimal.valueOf(-1.5);
    }
}
图片名称

注意这些数组是 byte 类型的.

BigDecimal 也是有上限的. 但是实际电脑内存是不可能达到这么大的值的, 所以可以认为是无限大的.

标签:BigDecimal,valueOf,System,println,public,out
From: https://www.cnblogs.com/Chengkai730/p/18548814

相关文章

  • BigDecimal的基本用法
    初始化BigDecimalamount=newBigDecimal("15");加减乘除publicstaticvoidmain(String[]args){BigDecimalamount=newBigDecimal("15");BigDecimalamount2=newBigDecimal("3");//加BigDecima......
  • BigDecimal使用
    常见方法我们在使用BigDecimal时,为了防止精度丢失,推荐使用它的BigDecimal(Stringval)构造方法或者BigDecimal.valueOf(doubleval)静态方法来创建对象。《阿里巴巴Java开发手册》对这部分内容也有提到,如下图所示。加减乘除add方法用于将两个BigDecimal对象相加,subt......
  • BigDecimalUtil工具类 Java 多种类型(Double, String, Integer)转换成BigDecimal 进行加
    工具说明没有什么太复杂的代码。先是通过方法名称确定返回值的类型(BigDecimal、Double、String)。然后大量的重载方法,用“穷举法”把BigDecimal、Double、String、Integer四种类型进行各种形式的两两组合,进行加减乘除运算。运算时非BigDecimal类型的参数会转化成BigDecim......
  • BigDecimal 常用方法
    文章目录BigDecimal常用方法1.初始化BigDecimal2.创建BigDecimal对象3.BigDecimal类中定义好的常量4.BigDecimal值之间的转换5.取当前值的相反数、绝对值、幂函数、保留数值的精度6.BigDecimal之间的运算:加减乘除方法7.两数相除保留精度BigDecimal常用方法1.初......
  • 【常用API】Math,System,Runtime,BigDecimal
    Math代表数学,是一个工具类,提供的都是对数据进行操作的一些静态方法。Math类提供的常见方法方法名说明publicstaticintabs(inta)获取参数的绝对值publicstaticdoubleceil(doublea)向上取整publicstaticdoublefloor(doublea)向下取整publicstaticintround(......
  • BigDecimal 详解与实战
    BigDecimal详解与实战JavaBigDecimal完整指南引言什么是`BigDecimal`?创建`BigDecimal`对象常用方法示例代码注意事项实际运用金融计算示例代码:商业应用示例代码:科学计算示例代码:数据汇总和统计示例代码:为什么选择`BigDecimal`?JavaBigDecimal完整指南......
  • Java BigDecimal 详解
     目录一、BigDecimal简介二、常用方法A、BigDecimal常用构造方法B、BigDecimal常用方法二、代码实现A、加减乘除1.创建两个BigDecimal对象2.BigDecimal相加3.BigDecimal相减4.BigDecimal相乘5.BigDecimal相除B、转换1.定义一个数值2.转换3.java.math.BigDeci......
  • java实际开发——涉及金额时使用的数据类型BigDecimal
    目录首先说结论,使用BigDecimal类。为什么不用其它的类型?(比如int、long、float、double)1、整型:2、浮点型:BigDecimal类基本数据类型与BigDecimal使用时的差别:1、创建2、+-*/3、比较标度(Scale)舍入模式首先说结论,使用BigDecimal类。为什么不用其它的类型?(比......
  • BigDecimal
    加减乘除计算首先对bigdecimal的初始化BigDecimalnum1=newBigDecimal(0.005);BigDecimalnum2=newBigDecimal(1000000);BigDecimalnum3=newBigDecimal(-1000000);//尽量用字符串的形式初始化BigDecimalnum12=newBi......
  • BigDecimal转换
    代码检测爆出代码质量:使用浮点数进行精确计算简单说就是不能用doule,不精确,要用BigDecimalBigDecimal是一个对象,它的加减乘除等都跟数字类型不一样,以下就是它的一些常用方法new一个BigDecimalBigDecimalnum1=newBigDecimal("0.12");输出结果add():相当于加a.add(b)相当于a+bBigDe......