Java数学逻辑错误

时间:2012-04-23 20:03:32

标签: java math logic

我的项目中有以下代码:

  int percent = 2;
  int count = 10;
  int percentagefill = (percent/10)*count; 
  System.out.println(percentagefill);

基本上发生的事情是,我设置了两个变量,百分比和计数。然后我计算填充百分比。由于一些奇怪的原因,填充百分比导致0,在这种情况下它应该是2.任何想法为什么?提前谢谢。

8 个答案:

答案 0 :(得分:6)

int除以int仍然会产生int。在这种情况下:

(percent/10)*count
= (2/10)*10
= (0) * 10 <-- 0.2 is rounded down to 0
= 0

您可以阅读this question以供参考。此外,这里是the Java spec,其中整数除法向0舍入。至于修正,只要floating point precision does not become an issue,只需使用double作为PaulP.R.O说。

答案 1 :(得分:3)

您可以除以10.0,或将int percent更改为double percent,以强制转换为double。否则,您将获得整数除法,从而截断小数部分。

以下是相关问题:"Java Integer Division, How do you produce a double?"

答案 2 :(得分:3)

如果你真的需要结果为int,你可以在除法之前进行乘法运算,以避免整数除法给出零。

int percentagefill = (percent*count)/10;

答案 3 :(得分:2)

更改此行:

int percentagefill = (percent/10)*count; 

要:

double percentagefill = (percent/10.0)*count;

这将使用浮点运算(因为10.0而不是10),并将结果存储在double(精度超过小数点而不是int

答案 4 :(得分:1)

正如其他人所提到的,你使用整数除法会失去精度

解决方案取决于您的需求:如果您的结果必须是整数,请先乘以:

int percentagefill = (percent*count)/10;

对你来说可能“足够好”(你会得到正确的答案)。

如果您需要能够得到小数答案,则需要将事物转换为浮点类型:

double percentagefill = (percent/10.0)*count;
//                                 ^ the .0 makes this a double,
//                                forcing the division to be a
//                                floating-point operation.

答案 5 :(得分:0)

很容易解决:

  int percent = 2;
  int count = 10;
  double percentagefill = (percent/10.0)*count; 
  System.out.println(percentagefill);

答案 6 :(得分:0)

戴夫牛顿,你的答案应该是一个答案。 :)

整数2 /整数10 = 0。 整数0 *整数10 = 0。

您需要一个浮点数或双倍data type。在处理信息时,总是厌倦了解释器进行数据类型假设和“演员表”的机会。 println接受一个intefer并转换为一个字符串进行显示就是一个例子。

我的大多数工作都是在php中,当使用值时,0,NULL,ERROR都可以是不同的东西,并且可以产生意想不到的结果。有时您可能需要将变量显式地转换为不同的数据类型以获得预期的结果。

答案 7 :(得分:0)

这是因为当您使用浮点数据类型(如double)时使用整数数据类型。这段代码应该导致2.0:

double percent = 2;
double count = 10;
double percentagefill = (percent/10)*count; 
System.out.println(percentagefill);