3/2 = 1.0?真?

Pau*_*ine 2 java android

可能重复:
Java Integer Division,你如何生成一个double?

double wang = 3 / 2;
Log.v("TEST", "Wang: " + Double.toString(wang));
Run Code Online (Sandbox Code Playgroud)

Logcat输出......

07-04 09:01:03.908: VERBOSE/TEST(28432): Wang: 1.0
Run Code Online (Sandbox Code Playgroud)

我确信这有一个明显的答案,可能我只是整夜编码累了,但这让我很难过.

Tom*_*han 13

在许多语言中,Java就是其中之一,在表达式中编写数字的方式决定了它获得的类型.在Java中,一些常见的数字类型表现得像这样1:

// In these cases the specs are obviously redundant, since all values will be
// cast correctly anyway, but it was the easiest way to show how to get to the
// different data types :P
int i = 1;
long l = 1L;
float f = 1.0f;   // I believe the f and d for float and double are optional, but
double d = 1.0d;  // I wouldn't bet on what the default is if they're omitted...
Run Code Online (Sandbox Code Playgroud)

因此,当你宣布时3 / 2,你真的在​​说(the integer 3) / (the integer 2).Java执行除法,并查找结果1(即the integer 1...),因为这是将3和2除以整数的结果.最后,the integer 1转换the double 1.0d为存储在变量中的内容.

要解决这个问题,你应该(正如许多其他人所建议的那样)来计算商数

(the double 3) / (the double 2)
Run Code Online (Sandbox Code Playgroud)

或者,在Java语法中,

double wang = 3.0 / 2.0;
Run Code Online (Sandbox Code Playgroud)

1来源:Oracle 的Java教程

  • 省略f和d时的默认值为double。[*“如果浮点文字的后缀是ASCII字母” F“或” f“,则其类型为” float“; **否则,其类型为`double`,并且可以选择以ASCII字母后缀` D`或`d` **。“ *](https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.2) (2认同)

Bor*_*vić 6

的整数除法32等于1与残余物1.铸造double给予1.0


Chr*_*Wue 6

3并且2是整数常量,因此3 / 2是一个整数除法,导致1然后将其转换为double.你要3.0 / 2.0


Eng*_*uad 5

尝试: double wang = 3.0 / 2.0;