本文最后更新于:December 3, 2021 pm
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。
目录 导包:import java,math.*; 或者:import java,math.BigInteger; import java,math.BigDecimal;
1.整数(BigInteger类) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Scanner cin = new Scanner(System.in); BigInteger a,b; a = cin.nextBigInteger(); b = cin.nextBigInteger(); System.out.println(a.add(b)); System.out.println(a.subtract(b)); System.out.println(a.multiply(b)); System.out.println(a.divide(b)); System.out.println(a.mod(b)); System.out.println(a.remainder(b)); 10 4 21 2 1 1
2.小数(BigDecimal类) Scanner cin = new Scanner(System.in); BigDecimal a,b; a = cin.nextBigDecimal(); b = cin.nextBigDecimal(); System.out.println(a.add(b)); System.out.println(a.subtract(b)); System.out.println(a.multiply(b)); System.out.println(a.divide(b)); System.out.println(a.remainder(b)); 10.5 4.1 23.36 2.28125 0.9
2.1 小数位数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Scanner cin = new Scanner(System.in); BigDecimal big ; big = cin.nextBigDecimal(); System.out.println(big.scale()); System.out.println(big); big = big.stripTrailingZeros(); System.out.println(big.scale()); System.out.println(big);123.4500000 7 123.4500000 2 123.45 12340000 0 12340000 -4 1.234E+7
对一个BigDecimal设置它的scale,如果精度比原始值低,那么按照指定的方法进行四舍五入或者直接截断。
import java.math.BigDecimal;import java.math.RoundingMode; BigDecimal d1 = new BigDecimal("123.456789" ); BigDecimal d2 = d1.setScale(4 , RoundingMode.HALF_UP); BigDecimal d3 = d1.setScale(4 , RoundingMode.DOWN); System.out.println(d2); System.out.println(d3);
对BigDecimal做加、减、乘时,精度不会丢失,但是做除法时,存在无法除尽的情况,这时,就必须指定精度以及如何进行截断。
BigDecimal d1 = new BigDecimal("123.456" ); BigDecimal d2 = new BigDecimal("23.456789" ); BigDecimal d3 = d1.divide(d2, 10 , RoundingMode.HALF_UP); BigDecimal d4 = d1.divide(d2);
对BigDecimal做除法的同时求余数。调用divideAndRemainder()方法时,返回的数组包含两个BigDecimal,分别是商和余数,其中商总是整数,余数不会大于除数。
BigDecimal n = new BigDecimal("12.345" ); BigDecimal m = new BigDecimal("0.12" ); BigDecimal[] dr = n.divideAndRemainder(m); System.out.println(dr[0 ]); System.out.println(dr[1 ]);
2.2 比较BigDecimal 在比较两个BigDecimal的值是否相等时,要特别注意,使用equals()方法不但要求两个BigDecimal的值相等,还要求它们的scale()相等。 必须使用compareTo()方法来比较,它根据两个值的大小分别返回负数、正数和0,分别表示小于、大于和等于。总是使用compareTo()比较两个BigDecimal的值,不使用equals()。
BigDecimal d1 = new BigDecimal("123.456" ); BigDecimal d2 = new BigDecimal("123.45600" ); System.out.println(d1.equals(d2)); System.out.println(d1.equals(d2.stripTrailingZeros())); System.out.println(d1.compareTo(d2));