在Java中分割双精度时的奇怪行为

Joe*_*oe 16 java double divide

当我使用双打在Java中将317除以219时,我得到1.
例如:

double b = 317/219;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)

输出为:1.

这是因为它是一个重复的小数?不得不使用BigDecimal而不是烦人的.

Boh*_*ian 28

试试这个

 double b = 317/219D;
Run Code Online (Sandbox Code Playgroud)

java中的编码数字的默认类型是int,所以使用代码,java使用两个int数字,然后分割的结果也是int如此,这将截断小数部分以给出最终结果1.int然后将此结果int 1转换为double 1没有编译器警告的结果,因为它是一个加宽的转换(源类型保证"适合"到目标类型的转换).

通过编码任何一个数字double与尾随编码D(你也可以使用d,但我总是使用大写字母,因为L小写l看起来像a 1),分割的结果也是double如此.


xag*_*gyg 5

另一种选择......

double b = (double)317/219;
Run Code Online (Sandbox Code Playgroud)