0

我的项目中有以下代码:

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

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

4

8 回答 8

6

int除以int仍将导致int. 在这种情况下:

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

您可以阅读此问题以供参考。另外,这是Java规范,其中说整数除法向0舍入。至于修复,只要浮点精度不成问题,就double按照PaulP.RO所说的那样使用。

于 2012-04-23T20:04:19.297 回答
3

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

这是一个相关的问题:“Java 整数除法,你如何产生一个double?”

于 2012-04-23T20:06:01.763 回答
3

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

int percentagefill = (percent*count)/10;
于 2012-04-23T20:08:51.963 回答
2

更改此行:

int percentagefill = (percent/10)*count; 

到:

double percentagefill = (percent/10.0)*count;

这将使用浮点运算(因为是10.010 而不是 10),并将结果存储在 a 中double(与 a 不同,它的精度超过小数点int)。

于 2012-04-23T20:05:46.987 回答
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.
于 2012-04-23T20:11:14.363 回答
0

很容易修复:

  int percent = 2;
  int count = 10;
  double percentagefill = (percent/10.0)*count; 
  System.out.println(percentagefill);
于 2012-04-23T20:07:15.507 回答
0

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

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

您将需要浮点或双精度数据类型。在处理信息时,请始终避免解释器做出数据类型假设和“强制转换”的机会。println 接受一个干扰器并转换为一个字符串以供显示就是一个例子。

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

于 2012-04-23T20:09:35.830 回答
0

这是因为当您应该使用浮点数据类型(例如 double)时,您使用的是整数数据类型。此代码应生成 2.0:

double percent = 2;
double count = 10;
double percentagefill = (percent/10)*count; 
System.out.println(percentagefill);
于 2012-04-24T00:13:32.853 回答