我的代码中存在问题,因为相同的浮点数可以有多个表示形式。 例如,这些数字被认为是相同的:
我不太关心一个大的精度,我需要计算这些数字的 CRC 它们应该是相同的,所以我的方法是使用这个代码:
private static float Rounding(float v, float p)
{
return Mathf.Round (v * p) / p;
}
p 是我的精确度。
这似乎运作良好,但在这种情况下,如果我使用 p = 1e7 ,第一个数字乘法将导致 299999.4 并四舍五入到 299999 ,变为 0.0299999 ,而 0.03 将保持 0.03 。那是我的问题。
我做对了吗?也许答案是我不能使用 p 这个大,但我不知道浮点数是如何工作的,所以我不知道 p 的大小在所有情况下工作。
但是,我知道我的浮点值位于一个不如浮点范围(±1.5e-45到±3.4e38)的范围内。我的意思是,如果我知道我的花车范围是[-100; + 100],我可以假设 p 有足够的十进制数字为 3 。是吗?
还有其他办法吗?
答案 0 :(得分:4)
答案 1 :(得分:0)
我不知道我是否帮助你,但如果你需要将这两个数字视为相等,你可以使用:
Math.Round(Convert.ToDecimal((float)0.0299999400),2); //result is 0.03
Math.Round(Convert.ToDecimal((float)0.0300000000),2); //result is 0.03
你有它。如果你想将你的数字四舍五入到1e7的精度,那么当然这两个数字会有所不同。