我需要调整双变量的值。为了做到这一点,我写了这个扩展方法
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?
答案 0 :(得分:3)
你是对的,双数据类型对数学运算来说并不精确。
尝试使用类似System.Decimal
的精确十进制数据类型https://msdn.microsoft.com/en-us/library/system.decimal.aspx
答案 1 :(得分:2)
由于float
或double
数据类型中显示的rounding数字,会产生结果。未预见到的行为的原因在于,并非每个有理数都可以在特定的浮点类型和“&#39;分辨率”中表示。可表示数字随着绝对值的增加而减少。