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); }