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

时间:2012-12-02 09:33:23

标签: java double divide

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

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

输出为:1。

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

7 个答案:

答案 0 :(得分:27)

试试这个

 double b = 317/219D;

java中的默认编码类型是int,因此,使用代码,java会使用两个int数字,然后除法的结果为{{1} }也将截断小数部分以得到int的最终结果。然后,此1结果会从int转换为int 1而不会显示编译器警告,因为它是加宽强制转换(源类型保证“适合” “进入目标类型。”

将其中任何一个数字编码为double 1,后跟double(您也可以使用D,但我总是使用大写字母,因为d为小写{ {1}}看起来像L),除法的结果也是l

答案 1 :(得分:5)

另一种选择......

double b = (double)317/219;

答案 2 :(得分:3)

这是因为你使用了整数文字,所以你要进行整数除法。

尝试改为编写double b = 317.0/219.0;

答案 3 :(得分:2)

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

double b = 1.0D;

答案 4 :(得分:0)

这是int除法。写:

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

答案 5 :(得分:0)

因为你提出的数字是不合适的,所以答案也是如此 要获得双倍,您需要使用带浮点数的数字或者使用您使用的整数之一:

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

或:

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

答案 6 :(得分:-3)

你可以尝试

double b = 0.0;
b = 317/219;

这样我就可以返回小数点