=(1.22);
.out.(" 值为:"+ );
=(“1.22”);
.out.(" 值为:"+ );
你认为输出会是什么? 如果你没想到第一个会输出1.22,那么恭喜你,你猜对了,输出如下:
与:1。
值为:1.22
JDK的说明: 1、参数类型为的构造方法的结果具有一定的不可预测性。 人们可能会认为在 Java 中编写 (0.1) 会精确等于 0.1(1 的未缩放值,其小数位数为 1),但实际上它等于 0。这是因为 0.1 不能精确地表示为(或者,就此而言,作为任何有限长度的二进制分数)。 因此,传递给构造函数的值将不会完全等于 0.1(尽管显然等于该值)。
2. 另一方面,构造函数是完全可预测的:write("0.1") 将创建一个恰好等于预期 0.1 的值。 因此,相比之下,一般建议先使用构造函数方法。
3. 当必须将其用作源时,请注意此构造函数提供了精确的转换; 它提供的结果与使用 .() 方法和 () 构造函数不同,后者将转换为 . 要获得结果,请使用 () 方法。
用于精确运算(实现加、减、乘、除)
加、减、乘、除
add(value);//相加
( 价值); //减法
( 价值); // 乘法
( 价值); //分配
public class Arith {
public static double add(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.add(b2).doublevalue();
}
public static double sub(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.subtract(b2).doublevalue();
}
public static double mul(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.multiply(b2).doublevalue();
}
public static double div(double value1,double value2,int scale) throws IllegalAccessException{
//如果精确范围小于0,抛出异常信息
if(scale<0){
throw new IllegalAccessException("精确度不能小于0");
}
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.divide(b2, scale).doublevalue();
}
}