16

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

double b = 317/219;
System.out.println(b);

输出是:1。

这是因为它是循环小数吗?不得不改用 BigDecimal,这很烦人。

4

7 回答 7

28

试试这个

 double b = 317/219D;

java中编码数字的默认类型是int,因此使用您拥有的代码,java正在处理两个int数字,除法的结果也将是int,这将截断小数部分以给出最终结果1。然后将此int结果从int 1转换为 adouble 1而没有编译器警告,因为它是一个扩大转换(保证源类型“适合”目标类型的转换)。

通过将任一数字编码为double尾随D(您也可以使用d,但我总是使用大写字母,因为L小写l看起来像 a 1),除法的结果也将是double

于 2012-12-02T09:35:01.227 回答
5

另一种选择...

double b = (double)317/219;
于 2012-12-02T13:31:37.287 回答
3

这是因为您使用了整数文字,所以您正在进行整数除法。

试着改写double b = 317.0/219.0;

于 2012-12-02T09:34:57.300 回答
2

值得一提的是,您的示例在运行时没有划分。317/219 在编译时计算(整数除法,分数被丢弃)并替换为常数。如果你反编译 .class (我使用 Jad http://www.kpdus.com/jad.html)你会看到

double b = 1.0D;
于 2012-12-02T09:48:02.567 回答
0

这是int分裂。写:

double b = 317.0/219;
System.out.println(b);
于 2012-12-02T09:34:57.857 回答
0

因为您输入的数字是 inetgers,所以答案也是如此。
要获得双精度,您需要使用浮点数或转换您使用的整数之一:

double b = 317.0/219;
System.out.println(b);

或者:

double b = ((double)317)/219;
System.out.println(b);
于 2012-12-02T09:36:20.067 回答
-3

你可以试试

double b = 0.0;
b = 317/219;

这样我就可以返回小数点

于 2015-10-01T03:16:37.593 回答