数学是错误的:总是0的结果

时间:2014-02-28 03:26:26

标签: c# math

所以我有一些代码基本上是:

int foo = bar * (percentage / 100);

其中foo表示bar的百分比。因此,如果bar为100且百分比为20,我们预计20/100 = 0.2所以100 * 0.2 = 20 ......但事实并非如此。每一次,没有失败foo = 0.我想'也许它不是一个整数'所以我试过:

float foo = bar * (percentage / 100);

foo仍然= 0.任何帮助都会受到赞赏,因为我从未在数学方面表现出色,但我很确定我对这一点没有错误

5 个答案:

答案 0 :(得分:1)

将其更改为小数float foo = bar * (percentage / 100.0);

答案 1 :(得分:1)

表达式(percentage / 100)的类型为整数,因此只要结果舍入为0,它就会为0.

如果将表达式中的某个数字更改为处理小数的类型。该表达式将改为评估该类型。

(percentage / 100.0)

然后当你将它与bar相乘时,该表达式也将是int而不是int foo = (bar * percentage) / 100;

或者,您可以更改执行顺序

bar * percentage

会有一些精度损失,但除非{{1}}小于100,否则不应该为0。

答案 2 :(得分:0)

试试这个:

float foo = (float)bar * ((float)percentage / 100.0);

要进行整理,请执行以下操作:

in foo = (int)Math.Ceiling((float)bar * ((float)percentage / 100.0));

答案 3 :(得分:0)

这里的问题是整数除法。你需要这样做:

int foo = bar * (percentage / 100.0);

这告诉编译器你想要一个double或float,而不是一个0或1的int。

答案 4 :(得分:0)

我认为问题在于(百分比/ 100)。它是整数,所以20/100 = 0。 源应该:var foo = bar *(百分比/ 100.0);

我希望这很有用