黑马程序员技术交流社区
标题:
double运算结果肿么会这样子?
[打印本页]
作者:
黄奕豪
时间:
2012-5-16 21:35
标题:
double运算结果肿么会这样子?
本帖最后由 黄奕豪 于 2012-5-16 21:50 编辑
今天忽然写一个关于double数据问题运算的小程序,忽然发现了一个奇怪的问题,于是做了下面一个求圆面积的小程序来测试,很是疑惑,
传入24的结果是:1808.6399999999999
传入18的结果是:1017.36
传入12的结果是:452.15999999999997
传入9的结果是:254.34
传入6的结果是:113.03999999999999
传入5的结果是:78.5
传入4的结果是:50.24
传入3的结果是:28.259999999999998
传入2的结果是:12.56
传入1的结果是:3.14
为什么传入3、6、12、24 ...这个3加倍的数列的时候结果的小数位数那么多,而传入其他数字的小数位数可以理解。
class Circle//定义圆类
{
private static double PI=3.14;//圆周率
private double radius;
Circle(double radius)
{
this.radius=radius;
}
public double getArea()//求圆的面积
{
return PI*radius*radius;
}
public static void main(String[] a)
{
Circle cl=new Circle(2);//在这里传入数据
System.out.println(cl.getArea());
}
}
复制代码
作者:
黄燕京
时间:
2012-5-16 21:52
Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出错误,
比如System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);
结果是这个样子的
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
作者:
黄奕豪
时间:
2012-5-16 22:05
黄燕京 发表于 2012-5-16 21:52
Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。 ...
:L看来我OUT了,那浮点数只能用来存数据不能用来运算么?如果真要运算要怎么样?
作者:
梁小波
时间:
2012-5-16 22:52
的确不能简单的计算,如果想计算用import java.math.BigDecimal;
可以构造一个BigDecimal对象来实现!
如BigDecimal myradius=new BigDecimal(Double.ToString(radius));
这样myradius.multiply(myradius).doubleValue(); 就可以了计算出radius的平方了!
一定注意Double.ToString(radius)!虽然有double类型的构造函数,但一定要用tostring方法转化为String类型。那个double的貌似不能直接用!
你可以详细的看一下 java.math.BigDecimal。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2