此贴记录PTA中学到的一些Java知识点
BigDecimal
对于有效位超过16位的数,普通的计算方法是不精确的,此时就要借助java.math包下的BigDecimal类来运算
- 构造函数
构造函数BigDecimal( )可以接受int,double,long,String,char[ ],BigInteger类型的参数
值得注意的是,参数为double的构造函数会遇到不可预测的精度错误,而参数为String时则是完全准确的,实在需要用double时,可用BigDecimal.valueOf(double),该方法配用参数为String的构造函数
- 运算与转换
BigDecimal类不适用一般的运算符,该类提供了运算方法及转换方法:
- add(BigDecimal) / 加
- subtract(BigDecimal) / 减
- multiply(BigDecimal) / 乘
- divide(BigDecimal) / 除
- pow(int) / 乘方
- toString()
- doubleValue()
- floatValue()
- intValue()
- longValue()
值得注意的是,加减乘除乘方运算都是精确的,除法存在无法除尽的情况,这时,就必须指定精度以及如何进行截断:
BigDecimal d1 = new BigDecimal("123.456");
BigDecimal d2 = new BigDecimal("23.456789");
BigDecimal d3 = d1.divide(d2, 10, RoundingMode.HALF_UP); // 保留10位小数并四舍五入
- 比较
提供了compare To( )方法比较两个BigDecimal类型
int a = bigdemical.compareTo(bigdemical2)
a = -1,表示bigdemical小于bigdemical2;
a = 0,表示bigdemical等于bigdemical2;
a = 1,表示bigdemical大于bigdemical2;