对不起基本问题, 我必须将long变量除以另一个long变量,但它返回0。 任何人都可以提供帮助
long a = 3004230;
long b = 6793368;
long c = (a/b)*100;
答案 0 :(得分:25)
该代码存在一些问题。首先,默认情况下,非浮点文字值的类型为int
,因此代码中的3004230
为int
。要明确声明long
使用3004230L
代替。
此外,使用非浮点文字完成的所有算术都会返回int
结果,除非专门投放到浮点类型,例如float
或double
。因此(a/b)*100
小于1,因此truncated降至0(浮点值刚刚被切断)。此外,即使它确实返回相同的结果,您也试图将其存储在long
中,该long a = 3004230L; // Use the L notation to declare this literal a long.
long b = 6793368L;
double c = ((double)a/b)*100; /* casting your division result to (double) means
the result will not be 0 */
无法存储浮点值。
因此,您应该执行以下操作以获得真实结果。
{{1}}
我希望这会有所帮助。
答案 1 :(得分:3)
final long a = 3004230;
final long b = 6793368;
final double c = ((double) a / b) * 100;
=> c = 44.22298335670907
答案 2 :(得分:2)
试一试。
long a = 3004230;
long b = 6793368;
long c = ((long)((float)a/(float)b)*100); //answer=44
float c = ((long)((float)a/(float)b)*100); //answer=44.1256378
答案 3 :(得分:1)
显然上面的答案是0
..你可以看到分割的时间
3004230/6793368 = 0.442 = 0(当投放到
long
类型时)
和
0 *任何数字= 0 ..
转换它使用此
double c = (a * 1.0/b)*100.0;
您必须使用可以存储decimal
或float
的{{1}}值的数据类型。double
无法存储十进制数
答案 4 :(得分:1)
您可以执行相同的操作,而无需转换为float
:
long a = 3004230L;
long b = 6793368L;
long c = (a * 100L)/b;
答案 5 :(得分:0)
你现在正在做的是整数除法。这将始终返回整数/长整数结果。您必须使用float或double来获得浮点结果,即使之后将其转换回整数值。
long c = (long)(a/(float)b*100);
答案 6 :(得分:0)
您创建的长c不是您期望的值。它在整数范围内。要创建长片,请使用
最终长c = 3004230L * 6793368L; 通过在数字文字后面添加一个L,您可以告诉编译器将其编译为long而不是int。