首页 > 编程知识 正文

bigdecimal舍弃小数点,bigdecimal保留整数两位

时间:2023-05-03 22:42:13 阅读:63157 作者:2340

加法: add (函数

减法: subtract ()函数

乘法: multipy ()函数

除法: divide ()函数

首先进行了初始化,在这里比较了两种形式。 第一个直接用value写数字值,第二个用string表示

bigdecimal num1=new bigdecimal (0.005; bigdecimal num2=new bigdecimal (1000000; bigdecimal num3=new bigdecimal (-1000000; //bigdecimal num 12=new bigdecimal (' 0.005 ) )尽量初始化为字符串bigdecimal num 22=new bigdecimal (1000000 ); bigdecimal num 32=new bigdecimal (-1000000 ); //加法bigdecimal result1=num1. add (num2); System.out.println (加法用value结果) result1); bigdecimal result 12=num 12.add (num 22; System.out.println (加法用String结果) result12 ); //减法bigdecimal result2=num1. subtract (num2); System.out.println ('减法用value结果' result2); bigdecimal result 22=num 12.subtract (num 22; System.out.println ('减法用String结果' result22 ); //乘法bigdecimal result3=num1. multiply (num2); System.out.println ('乘法用value结果' result3); bigdecimal result 32=num 12.multiply (num 22; System.out.println ('乘法用String结果' result32 ); //绝对值BigDecimal result4=num3.abs (; System.out.println (绝对值用value结果(result4); BigDecimal result42=num32.abs (; System.out.println (绝对值用String结果) result42 ); //除法bigdecimal result5=num2. divide (num 1,20,BigDecimal.ROUND_HALF_UP ); System.out.println (除法用value结果) result5); bigdecimal result 52=num 22.divide (num 12,20,BigDecimal.ROUND_HALF_UP ); System.out.println (除法用String结果) result52 ); 得到的结果: (用字符串初始化) )。

注:

1 ) System.out.println ) )的数值缺省为双精度型,双精度型小数计算不准确。

2 )如果使用BigDecimal类的构造方法传递给双精度类型,则计算结果也不准确。

由于并非所有浮点数都可以准确表示为双精度值,某些浮点数的值不能准确表示为双精度值,因此它们表示为与其最接近的双精度值。必须改用传入String的构造方法。这在如何构建BigDecimal类的注释中进行了说明。

3 )除法divide ) )函数:除法函数divide ) )时,如果能被除法2、10或100等整除,则不需要精确的小数位数和舍入模式。 如果不能整除,必须添加正确的小数位数和舍入模式。 否则,将报告错误。

divide(bigdecimaldivisor除数、int scale精确小数、int roundingMode舍入模式) 8种舍入模式如下:1、ROUND_UP

远离零的舍入模式。

在放弃非零部分之前始终增加数字。 非零废弃部分前面的数字始终加1。

请注意,在此舍入模式下,计算值的大小不会始终减小。

2、ROUND_DOWN

接近零的舍入模式。

在舍弃某一部分之前不增加数字(舍弃部分前面的数字不加1 ),也就是不舍弃)。

请注意,在此舍入模式下,计算值的大小不会始终增加。

3、ROUND_CEILING

接近正无限大的舍入模式。

如果BigDecimal为正,则舍入行为与ROUND_UP相同。

如果为负,则舍入行为与ROUND_DOWN相同。

请注意,在此舍入模式下,计算值不会始终减少。

4、ROUND_FLOOR

接近负无限大的舍入模式。

如果BigDecimal为正,则舍入行为与ROUND_DOWN相同。

如果为负,则舍入行为与ROUND_UP相同。

请注意,在此舍入模式下,计算值不会始终增加。

5、ROUND_HALF_UP

如果两个相邻数字之间的距离相等,舍入为“最近”数字将处于舍入模式。

废弃部分=0.5时,舍入动作与ROUND_UP相同。 否则,舍入行为与ROUND_DOWN相同。

请注意,这是我们大多数人在小学学过的舍入模式(四舍五入)。

6、ROUND_HALF_DOWN

如果两个相邻数字之间的距离相等,舍入为“最近”数字将处于向上舍入模式。

如果舍弃部分0.5,舍入动作与ROUND_UP相同; 否则,舍入行为与ROUND_DOWN相同。

7、ROUND_HALF_EVEN

如果舍入为“最近”数字,且两个相邻数字之间的距离相等,则舍入为相邻的偶数。

废弃部分左侧的数字为奇数时,舍入动作与ROUND_HALF_UP相同。

偶数时,舍入动作与ROUND_HALF_DOWN相同。

在此舍入模式下,可以在重复一系列计算时尽量减少累积错误。

这种舍入模型也称为银行家舍入法,主要用于美国。 四舍六入,五分之二的情况。

前一位为奇数时进入位,否则舍去。

以下的例子是保留小数点1位,这种尾数处理方式下的结果。

1.151.2 1.251.2

8、ROUND_UNNECESSARY

因为断言请求的操作有准确的结果,所以不需要舍入。

如果为生成准确结果的操作指定此舍入模式,则会抛出ArithmeticException。

大小比较bigdecimala=newbigdecimal('101 ); bigdecimalb=newbigdecimal('111 ); 使用compareTo方法进行比较//注意: a、b不能为null。 否则,空指针if(a.compareto(b )=-1 ) {system.out.println ) ' a小于b ' }; (if ) a.comPareto(b )==0) system.out.println ) (a为b ) ); (if ) a.comPareto(b )==1) system.out.println ) (a大于b ) ); (if ) a.comPareto(b )-1 ) system.out.println ) (a不低于b ) ); (if ) a.comPareto )1) system.out.println('a不超过b ' ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。