Java 为什么类型double PI=22/7返回3,但double PI=22.0/7或22/7.0返回正确的结果3.14。。?

Java 为什么类型double PI=22/7返回3,但double PI=22.0/7或22/7.0返回正确的结果3.14。。?,java,Java,我试图通过谷歌搜索和调试变量行为来找到答案,但不幸的是,我没有找到任何正确的答案。例如,这是一个与Java相关的问题 问题: 为什么在以下条件下“double”类型变量的行为类似于“int”类型: 双PI=22/7,返回3 但是,双PI=22.0/7或22/7.0返回3.14xxxxxxx 感谢您的帮助。因为Java(和其他一些编程语言)就是这样实现的 由于两者都是整数,因此预期结果也将是整数: int/int = int 另一方面,当一个操作符是double时,结果也将是double d

我试图通过谷歌搜索和调试变量行为来找到答案,但不幸的是,我没有找到任何正确的答案。例如,这是一个与Java相关的问题

  • 问题: 为什么在以下条件下“double”类型变量的行为类似于“int”类型:
双PI=22/7,返回3

但是,双PI=22.0/7或22/7.0返回3.14xxxxxxx

感谢您的帮助。

因为Java(和其他一些编程语言)就是这样实现的

由于两者都是整数,因此预期结果也将是整数:

int/int = int
另一方面,当一个操作符是
double
时,结果也将是
double

double/int = double
int/double = double

因为在java中,默认情况下数字是整数数据类型,所以,当您对整数进行数字运算时,结果也将是整数。将该整数赋给双精度变量时,它将提升为双精度变量,但保留其值。因此,结果是一个值与结果整数完全相同的double——在本例中为
3.0

在第一种情况下,两者都是整数,因此结果也是整数,并且您已将其赋值为double。但是转换(整数到双精度)发生在赋值到双精度之前


在第二种或第三种情况下,double中有一个,因此对double执行的操作,结果也是一个double值。

或'Pi=22D/7D'也会这样做。这里,22和7被声明为“double”,而不是“int”。

因为在java算术运算中,输出以所有相关变量或常量中最高的数据类型给出结果(仅应用于基本数据类型)

例如,如果在以下任何算术运算中:

  • 场景1=>var1是int,var2是float,var3是double:您将在double中得到结果
  • 场景2=>var1很短,var2很长,var3是float:您将在float中得到结果
  • 场景3=>var1是int,var2是long,var3是double:您将在double中得到结果

  • 注意:浮点族数据类型(float和double)始终主导int族数据类型,即使两者大小相同,例如在长的情况下,浮点输出将是浮点。

    查找
    整数算术
    二进制数字提升
    。此外,在这个问题中,
    double
    没有表现为
    int
    。因为在算术运算中,输出以所有相关变量或常量中最高的数据类型给出结果(仅适用于基本数据类型)@Shailesh Saxena:谢谢。我错过了这个重要的概念。@user3580294:是的,在这里提出问题之前,我会检查这些概念。好非常感谢你们这么快就回答了。谢谢。“所以,十进制值被转换成整数。”嗯?这是在哪里发生的?@user3580294:回答更新我知道你想说什么,但我认为措辞仍然有误导性。所发生的是整数值被转换为双精度,因此由于整数值是3,双精度值也是3。如果没有显式转换,double不能转换为整数。@user3580294:是的,如果你能用正确的措辞编辑我的答案。有点忙tasks@Abimaran库加塔桑:谢谢。。。我明白这个概念就在我身边。。认真地我的答案怎么了?我觉得完全正确。我错过了这个概念,所以我在这里长大。谢谢你们这么快就帮了我,谢谢。解释得很好。谢谢你这么快的回答。
    public static void main(String[] args) {
        double d = 22 / 7; // same as double d = (int)22 / (int) 7 
        System.out.println(d);  // so prints 3.0
        double dd = 22.0/7;  // same as double dd = (double)22 / (int) 7 
        System.out.println(dd);//prints 3.14xxxx
    }