[英]C# Keeps Rounding Numbers Up Producing inaccurate results
好的,这是我的头脑,它通过将小数点后的数字四舍五入而始终产生稍微不准确的结果。 我需要确切的值,而不是四舍五入的值!
所以首先要采取以下代码:
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),在这种情况下非常重要!
将您的平均出价提高一倍
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;
只需在数字后面添加“ 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
请仔细阅读msdn表格 ,它将帮助您了解真正的原因
参考: - http://msdn.microsoft.com/en-us/library/3b1ff23f.aspx
他们已经说过了
When you divide two integers, the result is always an integer
这里你划分两个整数,所以它的结果也是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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.