mysqlbigdecimal加减乘除_使⽤BigDecimal进⾏运算
⼀、MySQL中的decimal类型
在MySQL数据库中,有个decimal类型。
`product_price` decimal(8,2) NOT NULL COMMENT '单价',
decimal(8,2) 其中,8表⽰有效位数,也就是整数+⼩数⼀共不超过8位,2表⽰保留2个⼩数位。decimal(8,2)就表⽰数值中共有8位,其中6位整数,2位⼩数。
例:decimal(2,1),此时,插⼊数据“12.3”、“12”等会出现“数据溢出错误”的异常;插⼊“1.23”或“”会⾃动四舍五⼊成“1.2”;插⼊“2”会⾃动补成“2.0”,以确保2位的有效长度,其中包含1位⼩数。
数据库中的decimal类型,在Java中使⽤BigDecimal接收。
本次,就主要来说说Java中的BigDecimal。
⼆、Java中的BigDecimal类型
1、介绍
public class Test {
public static void main(String[] args) {
System.out.println(0.06 + 0.01);
System.out.println(1.0 - 0.42);
System.out.println(4.015 * 100);
System.out.println(303.1 / 1000);
}
}
输出结果:
0.06999999999999999
0.5800000000000001
401.49999999999994
0.30310000000000004
你认为你看错了,但结果却是是这样的。问题在哪⾥呢?原因在于我们的计算机是⼆进制的。浮点数没有办法是⽤⼆进制进⾏精确表⽰。我们的CPU表⽰浮点数由两个部分组成:指数和尾数,这样的表⽰⽅法⼀般都会失去⼀定的精确度,有些浮点数运算也会产⽣⼀定的误差。如:2.4的⼆进制表⽰并⾮就是精确的2.4。反⽽最为接近的⼆进制表⽰是 2.3999999999999999。浮点数的值实际上是由⼀个特定的数学公式计算得到的。
其实java的float只能⽤来进⾏科学计算或⼯程计算,在⼤多数的商业计算中,⼀般采⽤java.math.BigDecimal类来进⾏精确计算。
记得以前⽼师也说过,凡是涉及到⾦额、精确计算的,数据库中都使⽤decimal类型,对应的Java当中就是BigDecimal类型。
2、构造⽅法
BigDecimal有⼏个常⽤的构造⽅法
BigDecimal bignum1 = new BigDecimal("3.4");
BigDecimal bignum2 = new BigDecimal(3);
BigDecimal bignum3 = null;
3、BigDecimal的加减乘除
//加法
bignum3 = bignum1.add(bignum2);
bigdecimal除法保留小数System.out.println("和 是:" + bignum3);
//减法
bignum3 = bignum1.subtract(bignum2);
System.out.println("差 是:" + bignum3);
//乘法
bignum3 = bignum1.multiply(bignum2);
System.out.println("积 是:" + bignum3);
//除法
bignum3 = bignum1.divide(bignum2, 3); //精确到三位⼩数
System.out.println("商 是:" + bignum3);
除法是有两个参数,否则可能会报错:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal res 当不整除,出现⽆限循环⼩数时,就会抛异常。
因此,第⼆个参数就是设置精确的⼩数点,如:divide(xxxxx,2)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论