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