java计算圆面积的问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:43:58
程序如下:
class circle{
double radius;
public circle(double d){
radius=d;
}
}
public class work{
public static void main{
circle r=new circle(**);
double a,s;
s=2*3.14*r.radius;
a=3.14*r.radius*r.radius;

System.out.println("......"+s);
System.out.println("......"+a);
}
}
为什么当半径为2.2或一些比较小的数字时输出的结果末位会出现奇怪的值?如2.2会出现一个多余的3...

本人java新人~谢谢..
circle r=new circle(**); 中**为半径...

主要原因是数值2.2和数值3.14在计算机中保存的是其对应的二进制数,而这两个数又不能精确的转换为对应的二进制数,所以算出来会有误差,建议你找java解惑书看看。

简单 是浮点数的问题 正常 你要限制它的精确位数

circle r=new circle(**);

里面**只要是一个数字就行 不管是整型还是实型

你说的问题应该是不存在的 再看看其他原因

因为你定义的radius 是double 值
S右边的计算会自动转化为double 类型 就是失精度
当你输入的是int 型的时候 有点类似于float型 所以就没有什么变化

无精度损失计算方式:

import java.math.BigDecimal;
public class T {
public static void main(String[] arg){
double radius = 2.2;//半径
BigDecimal pi = new BigDecimal("3.14");//PI
BigDecimal a= pi.multiply(new BigDecimal(""+radius).pow(2));//面积
BigDecimal s=new BigDecimal("2").multiply(pi).multiply(new BigDecimal(""+radius));//周长
System.out.println("a="+a);
System.out.println("s="+s);
}
}

double为双精度的,保留的位数多点而已,即使没有它会自动补,应该限制小数点后面位数