我有一个简单的问题,为什么我们需要使用特殊的文字,因为它显然已经是我们正在使用的变量类型。
例如,您可以在此处看到我们使用的是double类型。我认为编译器也应该看到它。但如果我运行这样的代码:
double no_double = 60*(1000/3600);
System.out.format("result is: %.3f",no_double);
我得到的结果是:0,000
。
但如果我运行该代码:
double a_double = 60.0*(1000.0/3600.0);
System.out.format("result is: %.3f",a_double);
然后我得到了真实的结果:16,667
。
那么为什么我们需要使用文字?
up。 Java原始数据类型http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 0 :(得分:4)
你要划分两个整数 结果是另一个整数。
稍后将该整数分配给double
值不会改变除法。
答案 1 :(得分:0)
这并不明显,因为编译器(或JVM)无法知道您是否真的需要浮点数或整数。
如果考虑所有角落情况,我认为浮点数学很难。浮点数在设计上是精确的,而对于整数,您可以获得精确的结果。如果您可以坚持精确的结果,通常最好这样做,并且仅在明确需要时才使用浮动。例如,如果你需要比较两个变量的相等性,那么浮点数就必须给它一些边界和定义,你认为它们是相等的。对于整数,没有必要这样做,这是不言而喻的。
有些sevaral编程语言不会发生这种明显的分离,可能是javascript和PHP最受欢迎。他们选择动态自动转换数据类型。从长远来看,它会带来一些可观的开销和额外的问题,当你需要知道完全你手中的这个变量是什么时候。
还存在其他甚至没有这些不同数据类型的编程语言。也许那里的一切都只是一个对象。这是解决问题的一种方法。
答案 2 :(得分:0)
这只是Java作为C类语言规范的一部分。 Per the specification,如果表达式中未提升整数值,则计算结果为整数。语言设计者可能已决定将所有计算结果浮点数,但决定不这样做,可能是因为原始类型的行为对于C和C ++程序员来说并不熟悉,并且因为它使操作变慢。