附加数字到 Double

Extra Digits being appended to a Double

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

这是我使用的代码:

    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;
    }

浮点数和双精度数由于其存储方式而带有舍入误差。您应该使用小数来保持精确度。

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;
}