一个简单的Java代码,在打算返回true时意外返回false

一个简单的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); } }

下面的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);
    }
}
封装温度;
最终公开课主
{
公共静态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);