将双打当奇异行为在Java中(Odd behaviors when dividing doubles

2019-07-04 08:56发布

当我用双打在Java中划分317 219我得到1。
例如:

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

输出为:1。

这是因为它是一个循环小数? 不得不使用BigDecimal的,而不是它是烦人。

Answer 1:

试试这个

 double b = 317/219D;

在Java编码数的默认类型是int ,这样的代码,你有它的Java正与两家int数字,然后分工的结果将是int太,这将截断小数部分给出的最终结果1 。 此int结果随后从投int 1double 1没有编译器警告,因为它是一个加宽铸造(即一个源类型是保证“适合”到目标类型)。

通过编码或者数字作为double与后D (你也可以使用d ,但我总是用大写字母,因为L为小写l看起来像1 ),该部门的结果将是double得。



Answer 2:

另一种方法...

double b = (double)317/219;


Answer 3:

这是因为使用了整数文字,让你做一个整数除法。

尝试写double b = 317.0/219.0; 代替。



Answer 4:

值得一提的还有在运行时你的例子没有划分。 二百十九分之三百十七是在编译时计算(整数除法,分数被丢弃),并以恒定的替换。 如果你反编译的.class(我用亚德http://www.kpdus.com/jad.html ),你会看到

double b = 1.0D;


Answer 5:

这是int分。 写:

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


Answer 6:

因为你把数字inetgers所以是答案。
得到加倍,你需要要么使用大量浮点运算或投使用整数之一:

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

要么:

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


Answer 7:

你可以试试

double b = 0.0;
b = 317/219;

这样我可以返回小数点



文章来源: Odd behaviors when dividing doubles in Java