创建对象
BigDecimal.valueOf(2);
public static BigDecimal valueOf(long val) {
if (val >= 0 && val < zeroThroughTen.length)
return zeroThroughTen[(int)val];
else if (val != INFLATED)
return new BigDecimal(null, val, 0, 0);
return new BigDecimal(BigInteger.valueOf(val), val, 0, 0);
}
new BigDecimal("2");也可以,因为操作了底层数组
public BigDecimal(String val) {
this(val.toCharArray(), 0, val.length());
}
new BigDecimal(2);起不到效果,因为
public BigDecimal(int val) {
intCompact = val;
}
方法
add(BigDecimal)
substract(BigDecimal)
multiply(BigDecimal)
divide(BigDecimal)
不支持无理数
divide(BigDecimal,保留位数,舍入方式)
setScale(保留位数,舍入方式)
舍入运算,舍入结果被封装成一个新对象
例子
import java.math.BigDecimal;
import java.util.Scanner;
public class TestBigDecimal {
public static void main(String[] args) {
System.out.println("输入两个浮点数如 2和1.9 4.35和100");
Scanner sc = new Scanner(System.in);
double a=sc.nextDouble();
double b=sc.nextDouble();
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
BigDecimal bd1 = BigDecimal.valueOf(a);
BigDecimal bd2 = BigDecimal.valueOf(b);
BigDecimal bd3;
bd3=bd1.add(bd2);
System.out.println(bd3.doubleValue());
bd3=bd1.subtract(bd2);
System.out.println(bd3.doubleValue());
bd3=bd1.multiply(bd2);
System.out.println(bd3.doubleValue());
// bd3=bd1.divide(bd2);// Non-terminating decimal expansion;不支持无限小数
bd3=bd1.divide(bd2,50,BigDecimal.ROUND_HALF_UP);//50太长精度不够
System.out.println(bd3.doubleValue());
System.out.println(bd3.toString());
//498.64 setScale(-2,498.64) ->500
//498.64 setScale(-3,498.64) ->0
bd3=bd3.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(bd3);
sc.close();
}
}
运行结果
输入两个浮点数如 2和1.9 4.35和100
2 1.9
3.9
0.10000000000000009
3.8
1.0526315789473684
3.9
0.1
3.8
1.0526315789473684
1.05263157894736842105263157894736842105263157894737
1.05
运行结果2
输入两个浮点数如 2和1.9 4.35和100
4.35 100
104.35
-95.65
434.99999999999994
0.0435
104.35
-95.65
435.0
0.0435
0.04350000000000000000000000000000000000000000000000
0.04