本帖最后由 toShareBeauty 于 2013-7-6 10:06 编辑
- import java.math.BigDecimal;
- class Circle
- {
- int r;
- // 这里编译器把 3.14 就转换为 double 类型的 3.14,但是精度不变仍然是 3.14,不是3.140000什么的
- private final double π = 3.14;
- String form = "圆形";
- double area;
- Circle(int r)
- {
- this.r = r;
- }
- public double calcalation()
- {
- // 这里 double 类型参与数学运算,就会导致 double 类型的精度改变,这也是为什么java中的
- // float double 不能参与商业的数学运算, 解决这个问题可以使用 java.math.BigDecimal 这
- // 个类。并且要使用 BigDecimal(String val) 这个构造方法。跟详细的你可以参考一下,
- // http://blog.csdn.net/zhaoyw2008/article/details/9256777 这篇博文,或者查看 JDK api manual
- area = π*r*r;
-
- //*这是我的用 BigDecimal 解决的方法
- BigDecimal b1 = new BigDecimal(Double.toString(r));
- BigDecimal b2 = new BigDecimal(Double.toString(π));
- b1 = b1.multiply(b1);
- return b1.multiply(b2).doubleValue();
- //*/
- // return area;
- }
- }
复制代码 主要原因是 java 的浮点数只要以参与数学运算就会自动改变精度,并造成微小的误差。话说大哥我的感谢你,以前我以为希腊字母不能用来给变量命名呢,希腊字母给变量命名确实不会报错,只不过使用起来不太方便。
这是我打印的结果
|