在这种情况下我应该如何舍入浮点数?

2024-02-21

由于同一浮点数可以有多种表示形式,我的代码中遇到了问题。 例如,这些数字被认为是相同的:

  • 0.0299999400
  • 0.0300000000

我不太关心大精度,我需要计算CRC这些数字的数量,它们应该是相同的,所以我的方法是使用以下代码:

private static float Rounding(float v, float p)
{
    return Mathf.Round (v * p) / p; 
}

Where p是我的精确度。

这似乎运作良好,但在这种情况下,如果我使用p = 1e7,第一个数字相乘将导致299999.4并四舍五入为299999, 变得0.0299999, while 0.03会留下来0.03。这是我的问题。

我做的事正确吗?也许答案是我不能使用p这么大,但我不知道浮动是如何工作的,所以我不知道大小p在所有情况下工作。

但是,我知道我的浮点值所在的范围没有浮点范围那么大(±1.5e−45 到 ±3.4e38)。我的意思是,如果我知道我的浮动范围是 [-100; +100],我可以假设它有足够的小数位p to be 3。是对的吗?

还有其他方法可以做到这一点吗?


您应该将数字转换为decimal http://msdn.microsoft.com/en-us/library/system.decimal.aspx进而round http://msdn.microsoft.com/en-us/library/ms131274.aspx达到所需的精度。decimals它们的准确性和精确性一样,因此您可以例如:将它们转换为字符串和散列,而不会出现任何此类问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在这种情况下我应该如何舍入浮点数? 的相关文章

随机推荐