首页 > 编程知识 正文

bigdecimal保留小数点后两位,黑马程序员java笔记

时间:2023-05-03 20:42:04 阅读:30586 作者:1715

BigDecimal.setScale主要用于进位BigDecimal数据的小数位数、舍去位数、截断等操作。 其提前方法主要有以下8种,分别对应于数字0~7。 也就是说,写它们和写与它们对应的数字是等价的。

ROUND_UP :不管小数点后指定位以后的数有多大,高位有ROUND_DOWN :小数点后的指定位以后的数有多大,ROUND_CEILING :正数则为ROUND_UP,负数则为ROUND_DOWN 指定位数后,=0.5时进位,反之则舍弃。 3.0499时,小数点后1位为499,为0.5,因此不进位,为3.0,为3.0500;小数点后1位为500,=0.5,因此进位为3.1 ROUND_HALF_DOWN。 如果指定位数后为0.5,则进位反舍3.0501,小数点后1位为501,为0.5,所以进位为3.1,为3.0500,小数点后1位为500=0.5,所以不进位,为3.0 round _ half _ 5 如果指定位数为偶数,则设置为round_even。相反,设置ROUND_HALF_UPROUND_UNNECESSARY :如果指定位数=小数位数,则异常Java.lang.arithmetic exception 3:

讲理论无益,直接见下例: package ecnu.cn; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; publicclassbigdecimaltest { publicstaticvoidgetscale (bigdecimal num,Integer type ) for(intI=0; i 10; I ) (try ) system.out.print ) ) I: ) I ' ); 系统. out.println (num.set scale (I,type ) ); }catch(exceptione ) { e.printStackTrace ); } } System.out.println (; BigDecimal negate=num.negate (; for(intI=0; i 10; I ) (try ) system.out.print ) ) I: ) I ' ); 系统. out.println (negate.set scale (I,type ) ); }catch(exceptione ) { e.printStackTrace ); }system.out.println('n ' ); } publicstaticvoidmain (string [ ] args ) /建议使用字符串进行定义,以免影响精度。 bigdecimal num=new bigdecimal (' 3.123456789 ); 列表integer lst=new ArrayList (; //ROUND_UP :无论小数点后指定位以后的数量有多大,高位都有lst.add(bigdecimal.round_up ); //ROUND_DOWN :舍弃所有lst.add(bigdecimal.round_down ),不管小数点后指定位之后的数字有多大。 //ROUND_CEILING :正数则为ROUND_UP,负数则为round _ down lst.add (bigdecimal.round _ ceiling ); //round _ floor :与round _ ceiling正好相反,如果是正数则为ROUND_DOWN,如果是负数则为round _ up lst.add (bigdecimal.round _ floor 如3.0499,小数点后1位为499,为0.5,所以不进位,为3.0,为3.0500;小数点后1位为500,=0.5,所以进位为3.1 */lst.add (bigdecimal.round _ half )

_UP); /* ROUND_HALF_DOWN:若指定位数后若>0.5,则进位,反之舍弃。 如3.0501,小数点后1位后面为501,是>0.5的,所以要进位,变为3.1 而3.0500,小数点后1位后面为500,是=0.5的,所以不进位,变为3.0 */ lst.add(BigDecimal.ROUND_HALF_DOWN); // ROUND_HALF_EVEN:若指定位为偶数,则做ROUND_HALF_DOWN,反之做ROUND_HALF_UP lst.add(BigDecimal.ROUND_HALF_EVEN); // ROUND_UNNECESSARY:若指定的位数>=小数位数,则抛异常java.lang.ArithmeticException: Rounding necessary // 在下面的例子中,由于num小数点后有9位,所以当i>=9时就会抛异常,而i<9时无输出。 lst.add(BigDecimal.ROUND_UNNECESSARY); String[] name = new String[] {"ROUND_UP", "ROUND_DOWN", "ROUND_CEILING", "ROUND_FLOOR", "ROUND_HALF_UP", "ROUND_HALF_DOWN", "ROUND_HALF_EVEN", "ROUND_UNNECESSARY"}; for (int i = 0; i < lst.size(); i++) { System.out.println(name[i] + ":"); getScale(num, lst.get(i)); } }}

其输出为:

ROUND_UP:i: 0 4i: 1 3.2i: 2 3.13i: 3 3.124i: 4 3.1235i: 5 3.12346i: 6 3.123457i: 7 3.1234568i: 8 3.12345679i: 9 3.123456789i: 0 -4i: 1 -3.2i: 2 -3.13i: 3 -3.124i: 4 -3.1235i: 5 -3.12346i: 6 -3.123457i: 7 -3.1234568i: 8 -3.12345679i: 9 -3.123456789ROUND_DOWN:i: 0 3i: 1 3.1i: 2 3.12i: 3 3.123i: 4 3.1234i: 5 3.12345i: 6 3.123456i: 7 3.1234567i: 8 3.12345678i: 9 3.123456789i: 0 -3i: 1 -3.1i: 2 -3.12i: 3 -3.123i: 4 -3.1234i: 5 -3.12345i: 6 -3.123456i: 7 -3.1234567i: 8 -3.12345678i: 9 -3.123456789ROUND_CEILING:i: 0 4i: 1 3.2i: 2 3.13i: 3 3.124i: 4 3.1235i: 5 3.12346i: 6 3.123457i: 7 3.1234568i: 8 3.12345679i: 9 3.123456789i: 0 -3i: 1 -3.1i: 2 -3.12i: 3 -3.123i: 4 -3.1234i: 5 -3.12345i: 6 -3.123456i: 7 -3.1234567i: 8 -3.12345678i: 9 -3.123456789ROUND_FLOOR:i: 0 3i: 1 3.1i: 2 3.12i: 3 3.123i: 4 3.1234i: 5 3.12345i: 6 3.123456i: 7 3.1234567i: 8 3.12345678i: 9 3.123456789i: 0 -4i: 1 -3.2i: 2 -3.13i: 3 -3.124i: 4 -3.1235i: 5 -3.12346i: 6 -3.123457i: 7 -3.1234568i: 8 -3.12345679i: 9 -3.123456789ROUND_HALF_UP:i: 0 3i: 1 3.1i: 2 3.12i: 3 3.123i: 4 3.1235i: 5 3.12346i: 6 3.123457i: 7 3.1234568i: 8 3.12345679i: 9 3.123456789i: 0 -3i: 1 -3.1i: 2 -3.12i: 3 -3.123i: 4 -3.1235i: 5 -3.12346i: 6 -3.123457i: 7 -3.1234568i: 8 -3.12345679i: 9 -3.123456789ROUND_HALF_DOWN:i: 0 3i: 1 3.1i: 2 3.12i: 3 3.123i: 4 3.1235i: 5 3.12346i: 6 3.123457i: 7 3.1234568i: 8 3.12345679i: 9 3.123456789i: 0 -3i: 1 -3.1i: 2 -3.12i: 3 -3.123i: 4 -3.1235i: 5 -3.12346i: 6 -3.123457i: 7 -3.1234568i: 8 -3.12345679i: 9 -3.123456789ROUND_HALF_EVEN:i: 0 3i: 1 3.1i: 2 3.12i: 3 3.123i: 4 3.1235i: 5 3.12346i: 6 3.123457i: 7 3.1234568i: 8 3.12345679i: 9 3.123456789i: 0 -3i: 1 -3.1i: 2 -3.12i: 3 -3.123i: 4 -3.1235i: 5 -3.12346i: 6 -3.123457i: 7 -3.1234568i: 8 -3.12345679i: 9 -3.123456789ROUND_UNNECESSARY:i: 0 i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 i: 8 i: 9 3.123456789i: 0 i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 i: 8 i: 9 -3.123456789java.lang.ArithmeticException: Rounding necessaryat java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4179)at java.math.BigDecimal.needIncrement(BigDecimal.java:4235)at java.math.BigDecimal.divideAndRound(BigDecimal.java:4143)at java.math.BigDecimal.setScale(BigDecimal.java:2455)at ecnu.cn.BigDecimalTest.getScale(BigDecimalTest.java:13)at ecnu.cn.BigDecimalTest.main(BigDecimalTest.java:65)...

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