繁体   English   中英

Java数学逻辑错误

[英]Java math logic error

我的项目中包含以下代码:

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

基本上发生的是,我设置了两个变量,百分比和计数。 然后,我计算百分比填充。 出于某种奇怪的原因,百分比填充导致结果为0,在这种情况下应为2。 提前致谢。

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

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

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

您可以将其除以10.0 ,或将int percent更改为double percent ,以强制将转换转换为double 否则,您将获得整数除法,该除法将舍去小数部分。

这是一个相关的问题: “ Java整数部分,您如何产生一个double ?”

如果您确实需要将结果设为int ,则可以在除法之前进行乘法运算,以避免整数除法为零。

int percentagefill = (percent*count)/10;

更改此行:

int percentagefill = (percent/10)*count; 

至:

double percentagefill = (percent/10.0)*count;

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

正如其他人提到的那样,整数除法会损失精度

解决方案取决于您的需要:如果您的结果仍然需要为整数,请先乘以:

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.

很容易解决:

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

戴夫牛顿,您的答案应该是答案。 :)

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

您将需要一个float或double 数据类型 在处理信息时,始终要让解释器做出数据类型假设和“转换”的机会感到厌倦。 一个例子就是println接受一个intefer并转换为字符串进行显示。

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

之所以如此,是因为您在应使用浮点数据类型(例如double)时使用整数数据类型。 此代码应为2.0:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM