【问题标题】:C# Keeps Rounding Numbers Up Producing inaccurate resultsC#不断四舍五入产生不准确的结果
【发布时间】:2013-10-05 15:55:57
【问题描述】:

好的,这就是我的想法,它通过四舍五入小数点后的数字不断产生稍微不准确的结果。我需要确切的值,而不是四舍五入的值!

所以首先使用以下代码:

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),这在这种情况下非常重要!

【问题讨论】:

  • 考虑使用小数,如果准确性是一个问题,而不是双精度。

标签: c# math double average rounding


【解决方案1】:

先将你的平均计算值加倍

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;

【讨论】:

  • 从技术上讲,问题的发生是因为除法的所有操作数都是整数,因此计算机执行整数除法,而不是浮点除法。将任何操作数更改为浮点数或双精度数将强制浮点除法并解决问题。上述方法将分子中 5 个数字的总和更改为双精度数,但将 5 更改为双精度数(通过编写 5d5.0)也可以解决问题
【解决方案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

【讨论】:

    【解决方案3】:

    请阅读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;
    

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2013-02-09
      • 1970-01-01
      • 2011-03-09
      • 2011-12-27
      相关资源
      最近更新 更多