当我使用双打在 Java 中将 317 除以 219 时,我得到 1。
例如:
double b = 317/219;
System.out.println(b);
输出是:1。
这是因为它是循环小数吗?不得不改用 BigDecimal,这很烦人。
试试这个
double b = 317/219D;
java中编码数字的默认类型是int
,因此使用您拥有的代码,java正在处理两个int
数字,除法的结果也将是int
,这将截断小数部分以给出最终结果1
。然后将此int
结果从int 1
转换为 adouble 1
而没有编译器警告,因为它是一个扩大转换(保证源类型“适合”目标类型的转换)。
通过将任一数字编码为double
尾随D
(您也可以使用d
,但我总是使用大写字母,因为L
小写l
看起来像 a 1
),除法的结果也将是double
。
另一种选择...
double b = (double)317/219;
这是因为您使用了整数文字,所以您正在进行整数除法。
试着改写double b = 317.0/219.0;
。
值得一提的是,您的示例在运行时没有划分。317/219 在编译时计算(整数除法,分数被丢弃)并替换为常数。如果你反编译 .class (我使用 Jad http://www.kpdus.com/jad.html)你会看到
double b = 1.0D;
这是int
分裂。写:
double b = 317.0/219;
System.out.println(b);
因为您输入的数字是 inetgers,所以答案也是如此。
要获得双精度,您需要使用浮点数或转换您使用的整数之一:
double b = 317.0/219;
System.out.println(b);
或者:
double b = ((double)317)/219;
System.out.println(b);
你可以试试
double b = 0.0;
b = 317/219;
这样我就可以返回小数点