一个简单的Java代码,在打算返回true时意外返回false
下面的Java简单代码几乎不包含3条意外返回false的语句,尽管看起来应该返回true一个简单的Java代码,在打算返回true时意外返回false,java,Java,下面的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); } }
package temp;
final public class Main
{
public static void main(String[] args)
{
long temp = 2000000000;
float f=temp;
System.out.println(f<temp+50);
}
}
封装温度;
最终公开课主
{
公共静态void main(字符串[]args)
{
长期温度=2000000000;
浮动f=温度;
这是因为
当f
被赋值2000000000
时,它会被转换成2.0E9
。然后当你把50加到2.0E9
时,它的值不会改变。所以实际上,(f==temp+50)
是真的
如果您需要处理大量数据,但需要精度,则必须使用以下方法:
long temp=2000000000;
BigDecimal d=新的BigDecimal(温度);
系统输出println(d.compareTo(新的BigDecimal(temp+50))<0);
将按预期打印true
(虽然在您的情况下,我不知道为什么需要使用除long
之外的数据类型).为什么首先要将其转换为浮点值呢?实际上,该代码本身没有任何意义。我只是想检查一下为什么该条件被评估为false,这让我有些吃惊,我决定在这里提问。
long temp = 2000000000;
BigDecimal d = new BigDecimal(temp);
System.out.println(d.compareTo(new BigDecimal(temp+50)) < 0);