mysql的decimal类型与Java的BigDecimal

ps: mysql中的decimal , 在java中的用BigDecimal表示的。

decimal

  • decimal(18,0) 18是定点精度,0是小数位数。
  • decimal(a,b) a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。
  • b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。

BigDecimal

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

四则运算代码测试
package com.zmz.MathTest;

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

/**
 * Create with IntelliT IDEA
 *
 * @Author: zhengmingzhe
 * @Date: 2022/11/22/14:21
 * @Description: Java中的BigDecimal运算测试
 */
public class BigDecimalTest {
    
    
    public static void main(String[] args) {
    
    
        //四则运算测试
        fourOperations();
    }

    public static void fourOperations() {
    
    
        BigDecimal a = new BigDecimal("123.231423423423");
        BigDecimal b = new BigDecimal("456");
        BigDecimal m = new BigDecimal("9");
        BigDecimal n = new BigDecimal("4");
        //加   结果:579.231423423423
        BigDecimal c = a.add(b);
        System.out.println(c);
        //减   结果:-332.768576576577
        BigDecimal d = a.subtract(b);
        System.out.println(d);
        //乘   结果:56193.529081080888
        BigDecimal e = a.multiply(b);
        System.out.println(e);
        //除 结果:2.250000
        //参数2:指定精度,保留6位小数 ; 参数3: 选择舍入模式,此处为 四舍五入
        BigDecimal f = m.divide(n, 6, BigDecimal.ROUND_HALF_UP);
        System.out.println(f);
        //舍弃小数位 结果:2
        // jdk 1.9中第三个参数 被RoundingMode取代
        BigDecimal g = m.divide(n, RoundingMode.DOWN);
        System.out.println(g);
        //除  结果 2.25
        // 2位小数;舍入模式为大于0.5进1,否则舍弃。
        BigDecimal h = m.divide(n, 2, RoundingMode.HALF_DOWN);
        System.out.println(h);
    }
}

注: BigDecimal的除法,需要指定计算答案的精度, 不然计算机不知道你的精度为多少,会抛异常的。
Exception in thread “main” java.lang.ArithmeticException

BigDecimal 的 signum() 方法

BigDecimal 的 signum() 方法 : 返回此 BigDecimal 的正负号。

代码测试
    public static void getSymbol() {
    
    
        //返回 1 表示值 为正值 ;  0 表示 为 0 ;  -1 表示 负数 。
        BigDecimal a = new BigDecimal("123");
        int b = a.signum(); // 结果是 1
        System.out.println(b);
    }

BigDecimal 的compareTo()方法

代码测试
    public static void compareToTest() {
    
    
        // 结果 : 1 表示 大于; 0 表示 等于; -1 表示 小于 .
        BigDecimal a = new BigDecimal(0.5);
        BigDecimal b = new BigDecimal(0.2);
        int c = a.compareTo(b); // 结果 C = 1
        System.out.println(c);
    }

猜你喜欢

转载自blog.csdn.net/qq_45925197/article/details/127982783