java诡异问题求解

[code="java"]
package hello;

public class Test {
public static double area(double d)
{
return d * d;
}
public static double perimeter(double d)
{
return d * 4;
}
public static void main(String args[])
{
double d = 3.1;
System.out.println("面积:" + area(d));
System.out.println("周长:" + perimeter(d));
}
}
[/code]
输出面积竟然是9.610000000000001,怎么回事啊?

4个回答

[code="java"]
//etc...
//double d = 3.1;

double d = 3.1F;

//etc...
[/code]

这有什么好诡异的,浮点数就是这样
想要无限精度的浮点数用BigDecimal类

BigDecimal a=new BigDecimal("9.61");
BigDecimal类定义了各种数学运算,多数情况下满足需求

浮点类型(float和double)表示的小数是不精确的,具体原因网上你一搜,就答案一大把。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!