如何在java中划分两个长变量

时间:2014-07-09 10:11:43

标签: java variables types casting

对不起基本问题,  我必须将long变量除以另一个long变量,但它返回0。 任何人都可以提供帮助

long a = 3004230;
long b =  6793368;
long c = (a/b)*100;

7 个答案:

答案 0 :(得分:25)

文字值和文字算术

该代码存在一些问题。首先,默认情况下,非浮点文字值的类型为int,因此代码中的3004230int。要明确声明long使用3004230L代替。

此外,使用非浮点文字完成的所有算术都会返回int结果,除非专门投放到浮点类型,例如floatdouble 。因此(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;

您必须使用可以存储decimalfloat的{​​{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。