[英]A simple Java code that returns unexpectedly false while it is intened to return true
Java中的以下简单代码几乎不包含3个语句,这些语句意外返回false,尽管看起来它应该返回true 。
package temp;
final public class Main
{
public static void main(String[] args)
{
long temp = 2000000000;
float f=temp;
System.out.println(f<temp+50);
}
}
上面的代码显然应该在控制台上显示为true ,但事实并非如此。 它显示为false 。 为什么?
这是因为浮点运算!=实数运算 。
当f
被分配2000000000
,它将被转换为2.0E9
。 然后,当您将50添加到2.0E9
,其值不会更改。 实际上, (f == temp + 50)
是true
。
如果你需要使用大数字但需要精度,你将不得不使用类似BigDecimal
东西:
long temp = 2000000000;
BigDecimal d = new BigDecimal(temp);
System.out.println(d.compareTo(new BigDecimal(temp+50)) < 0);
将按照预期打印出true
。
(虽然在你的情况下我不知道为什么你需要使用除long
之外的数据类型)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.