在Java中除法双打时的奇怪行为

2022-09-03 04:20:50

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

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

输出为:1。

这是因为它是重复出现的小数吗?不得不使用BigDecimal来代替,这很烦人。


答案 1

试试这个

 double b = 317/219D;

java中编码数字的默认类型是 ,因此使用您拥有的代码,java正在使用两个数字,然后除法的结果也将是,这将截断小数部分以提供的最终结果。然后,此结果将从不带编译器警告的 强制转换为 a,因为它是一种加宽强制转换(源类型保证“适合”目标类型)。intintint1intint 1double 1

通过将任何一个数字编码为尾随(您也可以使用,但我总是使用大写字母,因为小写看起来像a),除法的结果也将如此。doubleDdLl1double


答案 2

另一种选择...

double b = (double)317/219;

推荐