首页 > 编程知识 正文

bigdecimal格式化两位小数,bigdecimal除法四舍五入

时间:2023-05-06 17:16:06 阅读:146089 作者:2257

bigdecimalnumbigdecimal=new bigdecimal (5.33; num bigdecimal=convert number (num bigdecimal,3,2 ); //调用,5.33/3后小数1.7766666=1.78//BigDecimal,保留小数点后两位,使用publicbigdecimalconvertnumber (bigdecimal bigdecimal,int div numal String numString='0. '; for(intI=0; inum; I ) {numString='0'; } decimal格式df=new decimal格式(num string ); 返回新bigdecimal (df.format (a ).toString ); )如果bigdecimal不能整除(循环小数),则报告错误。 上面的是解决方法,下面的是bigdecimal。 divide方法提供准确的小数方法(推荐)。

@ testpublicvoidtesta ((stringcurrentlat2=' 2.455675 ) ); bigdecimal b=new bigdecimal (current lat2); b=b.divide(newbigdecimal(3),2,BigDecimal.ROUND_HALF_UP ); 系统. out.println (b ); //输出为0.82BigDecimal.setScale (; //用于格式化小数点setscale(1); //表示保留为小数,默认为四舍五入方式setscale(1,BigDecimal.ROUND_DOWN ); 如果直接删除多余的小数位数,如2.35,则2.3setscale(1,BigDecimal.ROUND_UP ); //进位处理,2.35为2.4setscale(1,BigDecimal.ROUND_HALF_UP ); //四舍五入后,2.35为2.4setscaler(1,BigDecimal.ROUND_HALF_DOWN ); //四舍五入后,2.35变为2.3,5时舍去详细说明(参考http://www.bdqn.cn/news/201311/11834.shtml ) ) ) )。

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.28、ROUND_UNNECESSARY断言请求的操作有准确结果,无需舍入。 如果为生成准确结果的操作指定此舍入模式,则会抛出ArithmeticException。 如果将数字直接转换为BigDecimal,则会显示不准确的数字。

bigdecimale=newbigdecimal(2.2; system.out.println(e: ) e; bigdecimalf=newbigdecimal(3.32; system.out.println(f: ) f; system.out.println(ef='e.add ) f ); /* e :2.20000000000177635683940025002500467810689453125 f 33603.319999999999984012784581789781781789999999999999 99999999999999999999999 02504646778106689453125 * /将数字转换为字符串,然后再转换为BigDecimal,可以计算精确的数字。 因此,转换为字符串,然后转换为BigDecimal可以获得准确的结果。

bigdecimale=newbigdecimal(2.2 ); system.out.println(e: ) e; bigdecimalf=newbigdecimal(3.32 ); system.out.println(f: ) f; system.out.println(ef='e.add ) f ); /*结果如下: e:2.2f:3.32e f=5.52 */

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