Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:双数据类型值不为';我不能给出确切的答案_Java - Fatal编程技术网

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

Java:双数据类型值不为';我不能给出确切的答案,java,Java,我找到一个值1的对数,它等于0,而不是0.0。当用户输入任何点的值,然后它给出准确的答案。但问题是哪一个值不包含在点中,它会以点为单位给出这些值的答案。我尝试了解析和类型转换,但什么都没有发生。这里面有函数吗 可以阻止这种情况的Java。 这是我的密码 public class New { public static void main(String[] args) { Scanner s = new Scanner(System.in); double num = 0; double res

我找到一个值1的对数,它等于0,而不是0.0。当用户输入任何点的值,然后它给出准确的答案。但问题是哪一个值不包含在点中,它会以点为单位给出这些值的答案。我尝试了解析和类型转换,但什么都没有发生。这里面有函数吗 可以阻止这种情况的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

默认情况下,
0.0
是表示
0
double
值的打印方式。另外,
Math.log
方法返回一个
double
<代码>0.0等于数字0。1的对数(任何正基)为0

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

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

这不是因为内在的表现或价值,或它的等价物;这是因为当呈现为
字符串
时,双值
0
是如何显示的(即通过代码
回答:“+result
)。从
Math.log(1)
返回的引擎盖下的值是IEEE 754正零的
double
表示,无论出于何种目的,它都等效于整数常量
0

当您切换
double num=0时会发生什么
int num=0?日志(1)确实等于0问题到底是什么?预期的输出是什么?我会这样做,但当任何一个点值出现时,它会给出error@PhilippWendler我想要双精度数据类型中的输出0而不是0.0
(result==(int)result)
将为任何精确的整数表示返回true,即
double
0、1或2,但不是
double
3,因为它无法精确表示。只是一个警告;这不是检查整数的完美方法。@shotgunnika虽然人们通常应该小心不能准确表示的
值,
3
不是其中之一
3
可以精确地表示为一个
double
。哦,derp,我想到的是简单的分数,而不是简单的整数…@rgetman在这里使用if-else或typecast是一个好方法。Java有没有任何函数可以完成这项工作。因为你需要两种不同的输出格式,基于它是否是整数,使用if/else是好的。您可以使用
Math.floor
测试数字的下限是否等于数字。最好在这里使用演员阵容。也可以使用
十进制格式
来控制输出。
if (result == (int) result)
{
    System.out.println((int) result);
}
else
{
    System.out.println(result);
}