附加到Double的额外数字

时间:2015-03-10 19:05:03

标签: c# decimal

我试着写一些快速代码来计算数字10的不同数量级。应该很简单,但结果有点奇怪。当计算10 ^ -6的东西时,会添加许多额外的小数。结果看起来有点像这样:

  • 0.1
  • 0.01
  • 0.001
  • 0.0001
  • 0.00001
  • 0.0000010000000000000002

以下是我使用的代码:

    private Double CalculateOrderOfMagnitude(Int32 n)
    {
        if (n < 0)
            return CalculateOrderOfMagnitude(n + 1) / 10.0;
        if (n > 0)
            return CalculateOrderOfMagnitude(n - 1) * 10.0;

        return 1.0d;
    }

1 个答案:

答案 0 :(得分:3)

Float和Doubles由于它们的存储方式而带有舍入误差。您应该使用小数来保持精确的精确度。

http://en.wikipedia.org/wiki/Double-precision_floating-point_format

private decimal CalculateOrderOfMagnitude(int n)
{
    if (n < 0)
        return CalculateOrderOfMagnitude(n + 1) / 10m;
    if (n > 0)
        return CalculateOrderOfMagnitude(n - 1) * 10m;

    return 1m;
}