bigdecimal金额相减(java double类型变量,相加或相减后面小数为什么会不一样呢)

本文目录
java double类型变量,相加或相减后面小数为什么会不一样呢
该问题主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示1/10。就像我们平时使用的十进制中无法精确的表示1/3是一样的道理,如果需要在数值计算中不含有任何误差,要使用BigDecimal类进行编程。
具体的代码如下
//两个Double数值相加
public static Double add (Double value01,Double value02){
BigDecimal b1=new BigDecimal(value01.toString());
BigDecimal b2=new BigDecimal(value02.toString());
return b1.add(b2).doubleValue();
}
//两个Double数值相减
public static Double sub (Double value01,Double value02){
BigDecimal b1=new BigDecimal(value01.toString());
BigDecimal b2=new BigDecimal(value02.toString());
return b1.subtract(b2).doubleValue();
}
JS中BigDecimal数据类型减法!!!!!!!
你可以用进位的方法解决,例如你先找出两个数的最大小数,然後都进成整数在相减然後在除以位数就行了,这样精度就准确了!
return jeLeft.toFixed(2);
bigdecimal加减乘除运算顺序
bigdecimal加减乘除运算顺序如下:
首先是bigdecimal的初始化,加法add()函数、减法subtract()函数、乘法multiply()函数、除法divide()函数、绝对值abs()函数。
注意:
1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。
2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!
因为不是所有的浮点数都能够被精确的表示成一个double类型值,有些浮点数值不能够被精确的表示成double类型值,因此它会被表示成与它最接近的double类型的值。必须改用传入String的构造方法。
舍入模式解释
1、ROUND_UP
舍入远离零的舍入模式。在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。注意,此舍入模式始终不会减少计算值的大小。
2、ROUND_DOWN
接近零的舍入模式。在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。注意,此舍入模式始终不会增加计算值的大小。
3、ROUND_CEILING
接近正无穷大的舍入模式。如果BigDecimal为正,则舍入行为与ROUND_UP相同;如果为负,则舍入行为与ROUND_DOWN相同。

更多文章:
blast premier春季赛(csgo战队vitality有谁)
2026年9月7日 21:50
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20






