如何在乘以Integer值时使用double数据类型?

时间:2011-07-29 05:33:01

标签: .net c#-3.0

我有截断下面给出的double数据类型vaiable的小数位的函数

             public double GetTruncate(double tobeTruncated, int divideFactor)
      {            
        if (divideFactor == 0)
            return Math.Truncate((double)tobeTruncated);
        else
        {
            tobeTruncated = tobeTruncated * divideFactor;
            tobeTruncated = Math.Truncate((double)tobeTruncated);
            tobeTruncated = tobeTruncated / divideFactor;
        }
        return tobeTruncated;


    }

示例:tobeTruncated = 35.66 dividefactor = 100

在执行上述行时,我将tobeTruncated的值设为 3565.9999999999995 ,而不是 3566 。我不知道原因。

当我将双变量更改为十进制时,我得到了正确答案。具有正确答案的修改函数如下:

           public double GetTruncate(double tobeTruncated, int divideFactor)
    {           

        decimal nTempData = (decimal)tobeTruncated;
        if (divideFactor == 0)
            return (double)Math.Truncate((decimal)nTempData);
        else
        {
            nTempData = nTempData * divideFactor;
            nTempData = Math.Truncate((decimal)nTempData);
            nTempData = nTempData / (decimal)divideFactor;
        }
        return (double)nTempData;

    }

有谁可以解释这背后的原因?

2 个答案:

答案 0 :(得分:1)

在.NET中,decimal数据类型表示固定的精度数字。 double数据类型表示浮点数,它是近似值并且是hould not be used when absolute precision is required

答案 1 :(得分:1)

浮点数只能用计算机用来存储它们的有限位数来近似。结果就是你所看到的。

阅读:Is double Multiplication Broken in .NET?

阅读:Binary floating point and .NET

并阅读:Why Do Computers Suck at Math?