为什么Java中需要数字文本?

为什么Java中需要数字文本?,java,Java,我有一个简单的问题,为什么我们需要使用特殊的文本,而它显然是我们正在使用的变量类型 例如,您可以看到我们在这里使用的是double-type。我认为编译器也应该看到它。但如果我运行这样的代码: double no_double = 60*(1000/3600); System.out.format("result is: %.3f",no_double); 我得到的结果是:0000 但如果我运行该代码: double a_double = 60.0*(1000.0/3600.0); Syste

我有一个简单的问题,为什么我们需要使用特殊的文本,而它显然是我们正在使用的变量类型

例如,您可以看到我们在这里使用的是double-type。我认为编译器也应该看到它。但如果我运行这样的代码:

double no_double = 60*(1000/3600);
System.out.format("result is: %.3f",no_double);
我得到的结果是:
0000

但如果我运行该代码:

double a_double = 60.0*(1000.0/3600.0);
System.out.format("result is: %.3f",a_double);
然后我得到了真实的结果:
16667

那么为什么我们需要使用文字呢


向上。Java基本数据类型

您正在除以两个整数。
其结果是另一个整数


稍后将该整数赋给一个
双精度
值不会改变除法。

您正在除法两个整数。
其结果是另一个整数


稍后将该整数赋给一个
双精度
值不会改变除法。

这并不明显,因为编译器(或JVM)无法知道您是否真的需要浮点或整数

我认为浮点数学很难,如果你考虑所有角落的情况。浮点数在设计上是不精确的,而使用整数可以得到精确的结果。如果您能够坚持精确的结果,那么最好是这样做,并且只有在明确需要时才使用浮动。例如,如果需要比较两个变量的相等性,那么就必须给它一些边界和定义,以定义你认为相等的变量。对于整数,不需要这样做,这是不言而喻的

有几种编程语言不存在这种显式分离,javascript和PHP可能是最流行的。他们选择动态自动转换数据类型。从长远来看,当您需要确切地知道您手中的这个变量是什么时,它会导致一些相当大的开销和额外的问题


还有一些编程语言甚至没有这些不同的数据类型。也许那里的一切都只是一个物体。这是解决问题的一种方法。

这并不明显,因为编译器(或JVM)无法知道您是否真的需要浮点或整数

我认为浮点数学很难,如果你考虑所有角落的情况。浮点数在设计上是不精确的,而使用整数可以得到精确的结果。如果您能够坚持精确的结果,那么最好是这样做,并且只有在明确需要时才使用浮动。例如,如果需要比较两个变量的相等性,那么就必须给它一些边界和定义,以定义你认为相等的变量。对于整数,不需要这样做,这是不言而喻的

有几种编程语言不存在这种显式分离,javascript和PHP可能是最流行的。他们选择动态自动转换数据类型。从长远来看,当您需要确切地知道您手中的这个变量是什么时,它会导致一些相当大的开销和额外的问题


还有一些编程语言甚至没有这些不同的数据类型。也许那里的一切都只是一个物体。这是解决这个问题的一种方法。

这只是Java作为C类型语言规范的一部分,如果表达式中未提升整数值,则计算结果为整数。语言设计者可以决定计算所有浮点数的结果,但不决定,可能是因为原始类型的行为对C和C++程序员不熟悉,并且因为它使操作变慢。

< P>这只是java作为C语言的规范的一部分。如果表达式中未提升整数值,则计算结果为整数。语言设计者可能已经决定将所有计算结果浮点数,但决定不这样做,可能是因为原始类型的行为对于C和C++程序员来说并不熟悉,并且因为它使操作变慢。你的意思是,“为什么我们需要明确区分整型和浮点型文字?”;因为这不是语言的工作方式。通常,子表达式的类型不会从它们的使用位置推断出来。@Reimeus
double
根本不是一个名称,它是一个关键字,命名变量
double
将使编译器失败:)这些都是文字。你的意思是,“为什么我们需要明确区分整型和浮点型文字?”;因为这不是语言的工作方式。一般来说,子表达式的类型不会从它们的使用位置推断出来。@Reimeus
double
根本不是一个名称,它是一个关键字,命名变量
double
会使编译器失败:)“float不精确”-不是真的;他们的行为很明确。它们只是与整数类型具有不同的特性。@OliCharlesworth只有在使用IEEE标准或其他严格标准指定的浮点时,才可以很好地定义该行为。这并不适用于所有浮动(但确实适用于java浮动)。我的主要观点是,浮点内部表示通常意味着,当你试图在基数为10的数字世界中使用它们时,它们作为值是不精确的,即使它们的行为是明确定义的。不过,我认为区分它们很重要
2.0/5.0==1.333
的精确度肯定不亚于
2/5==1
“浮点数是不精确的”-不是真的;他们的行为很明确。它们只是与整数类型具有不同的特性。@OliCharlesworth只有在使用IEEE标准或其他严格标准指定的浮点时,才可以很好地定义该行为。这并不适用于所有浮动(但确实适用于java浮动)。我的主要观点是,浮点内部表示通常意味着它们与v一样精确