如何使用双变量?

时间:2016-01-09 18:59:27

标签: c# .net

我需要调整双变量的值。为了做到这一点,我写了这个扩展方法

public static class Helper
{
    public static double Adjust(this double value, double l, double h)
    {
        while (value < l)
            value += h;
        while (value >= h)
            value -= h;

        return value;
    }
}

但它没有给我预期的结果。

我在这里调用我的代码:

private void Form1_Load(object sender, EventArgs e)
{
    double a = 10.1;
    Text = a.Adjust(5,10).ToString();
}

我希望结果为0.1但是0.099999999999999646。我已经发现它与double数据类型的精度有关。但是我如何才能将结果设为0.1?

2 个答案:

答案 0 :(得分:3)

你是对的,双数据类型对数学运算来说并不精确。

尝试使用类似System.Decimal

的精确十进制数据类型

https://msdn.microsoft.com/en-us/library/system.decimal.aspx

答案 1 :(得分:2)

由于floatdouble数据类型中显示的rounding数字,会产生结果。未预见到的行为的原因在于,并非每个有理数都可以在特定的浮点类型和“&#39;分辨率”中表示。可表示数字随着绝对值的增加而减少。