繁体   English   中英

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

[英]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.

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