C#保持舍入数字向上生成不准确的结果

时间:2013-10-05 15:55:57

标签: c# math double average rounding

好的,所以这是我的头脑,它通过舍入小数点后的数字产生一个稍微不准确的结果。我需要确切的价值,而不是圆润的价值!

首先,请使用以下代码:

int num1 = 10087;
int num2 = 9971;
int num3 = 9909;
int num4 = 9917;
int num5 = 9904;

double average = (num1 + num2 + num3 + num4 + num5) / 5;

double percentage = (10000 - average) / 100;

如果这个数学是在计算器上完成的,那么"百分比"是0.424。但如果它通过代码运行,则值将四舍五入为0.43,这是不准确的。我该如何阻止这种情况发生?

注意:请不要质疑10000号,我还需要结果正确的数字(0.424),这在这种情况下非常重要!

3 个答案:

答案 0 :(得分:5)

将你的平均计算量提高到第一位

int num1 = 10087;
int num2 = 9971;
int num3 = 9909;
int num4 = 9917;
int num5 = 9904;

double average = (double)(num1 + num2 + num3 + num4 + num5) / 5;

double percentage = (10000 - average) / 100;

答案 1 :(得分:2)

只需在数字后添加“d”......

int num1 = 10087;
int num2 = 9971;
int num3 = 9909;
int num4 = 9917;
int num5 = 9904;

double average = (num1 + num2 + num3 + num4 + num5) / 5d;

double percentage = (10000 - average) / 100d;

d告诉编译器使这些数字成为双精度浮点值而不是整数(你也可以只添加一个小数点)。没有“d”,数字是整数,计算机执行整数运算。这意味着

 9 / 5 = 1  instead of  1.8

答案 2 :(得分:0)

请阅读msdn表格,它将帮助您了解真正的原因
参考: - http://msdn.microsoft.com/en-us/library/3b1ff23f.aspx

他们已经说过了

<强> When you divide two integers, the result is always an integer

enter image description here


在这里你划分两个整数,所以它的结果也是int 你只需要像其他人给出的那样输入cast
正如 Ela 编写代码一样

int num1 = 10087;
int num2 = 9971;
int num3 = 9909;
int num4 = 9917;
int num5 = 9904;

double average = (double)(num1 + num2 + num3 + num4 + num5) / 5;

double percentage = (10000 - average) / 100;