老师您好:从网上购买的《Java从入门到精通》第五版,看到大数据处理这里个问题不解,望解惑。
问题在170页,9.6实践与练习第二题,求圆的面积
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
public class CircleArea {
static BigDecimal Area1(double value) {
BigDecimal r=new BigDecimal(value);
BigDecimal AREA=(new BigDecimal(Math.PI)).multiply(r.pow(2)); //这行代码执行时没有提示错误,我看课本里都是用的Double.toString(Math.PI))这种类型
return AREA;
}
static BigInteger Area2(String value) {
BigInteger r=new BigInteger(value);
BigInteger AREA=(new BigInteger(Double.toString(Math.PI))).multiply(r.pow(2)); //Double.toString(Math.PI))如果改成“1”,程序可正常执行
return AREA;
}
public static void main(String[] args) {
System.out.println("用BigDecimal类求圆的面积为:"+new DecimalFormat("#.#####").format(Area1(1)));
System.out.println("用BigInteger类求圆的面积为:"+new DecimalFormat("#.#####").format(Area2("1")));
}
}
代码编写完,没有提示错误,但运行的时候BigDecimal类没问题,BigInteger会报错,试着找了下错误在Double.toString(Math.PI) 这一行。试着替换成字符串“1”,运行的时候正常。Double.toString(Math.PI) 这句话不就是把double型转换成字符串形式的吗,跟“1”是一种类型,为啥还会报错?想不明白为什么。另外上面BigDecimal Area1方法中Math.PI换成Double.toString(Math.PI) 也可以正常执行,我看课本里都是用的Double.toString(Math.PI))这种类型,顺便也想问下课本中讲BigDecimal构造方法中参数有double型和String型都可以,而课本中方法参数是double型,在我看来却多此一举的用Double.toString(value1)转换成String型,是不是用double型会有什么隐藏的弊端,才会这么写。