[英]Java math logic error
我的项目中包含以下代码:
int percent = 2;
int count = 10;
int percentagefill = (percent/10)*count;
System.out.println(percentagefill);
基本上发生的是,我设置了两个变量,百分比和计数。 然后,我计算百分比填充。 出于某种奇怪的原因,百分比填充导致结果为0,在这种情况下应为2。 提前致谢。
您可以将其除以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.