Java:双数据类型值不能给出确切的答案

时间:2015-05-29 17:18:57

标签: java

我发现值为1的对数等于0而不是0.0。当用户输入任何点值时,它会给出确切的答案。但问题是哪个值不包含在点中它给出了这些值的答案。我尝试解析和Typecasting但没有任何事情发生。它是否有一个函数 Java可以阻止这个。
这是我的代码。

public class New {

public static void main(String[] args) {
Scanner s = new Scanner(System.in);
double num = 0;
double result;
System.out.print("Value:");
num = s.nextDouble();
result = Math.log(num);

System.out.print("Answer:"+result);
}

}

编译器输出:

Value:1
Answer:0.0

3 个答案:

答案 0 :(得分:1)

System.out.print("Answer:" + (result == 0.0 ? "0" : result));

答案 1 :(得分:1)

0.0是默认打印double代表0的值的方式。此外,Math.log方法返回double0.0等于数字0.对数(任何正基数)为1。

如果您希望在结果为整数时不打印小数点,那么请测试它是否为整数。

if (result == (int) result)
{
    System.out.println((int) result);
}
else
{
    System.out.println(result);
}

答案 2 :(得分:1)

这不是因为内部表示或价值,或它等同于什么;这是因为在呈现0时(即代码String)显示双值"Answer:"+result的方式。从Math.log(1)返回的引擎下的值是IEEE 754正零的double表示,对于所有意图和目的而言,它等于整数常量0