求自由落体的距离
先附上代码:
public class Test1 {
public static void main(String[] args) {
System.out.println("输入时间:");
double time = new Scanner(System.in).nextDouble();
double JuLi = 0.5 * 9.8 * time * time;
System.out.println("JuLi = " + JuLi);
}
}
输入时间为5的时候距离为 JiLi=122.5,那么当你输入3.23时候你会发现得到 JiLi=51.121210000000005(内存溢出),因为double类型最多支持16位有效数字,且最大值只支持10的308次方
最后确定用 BigDecimal 精确地浮点数运算(在用之前先讲几个方法先------四则运算)
add(BigDecimal bd) //加
subtract(BigDecimal bd) //减
multiply(BigDecimal bd) //乘
divide(BigDecimal bd) //除
divide(BigDecimal bd,保留位数,舍入方式) //四舍五入用的
将上面的自由落体代码改成这样:
public class Test1 {
public static void main(String[] args) {
System.out.println("输入时间:");
double time = new Scanner(System.in).nextDouble();
BigDecimal a1 = BigDecimal.valueOf(4.9);//这里是1/2 * 9.8
BigDecimal a2 = BigDecimal.valueOf(time);
double JuLi1 = a1.multiply(a2.pow(2)).doubleValue();//pow()方法是开方
System.out.println("JuLi1 = " + JuLi1);
}
}
JuLi1 = 51.12121
这时你就不用当心内存溢出什么之类的了