【发布时间】:2015-02-07 16:07:15
【问题描述】:
我看过这段代码:
(int)(num < 0 ? (num - 0.5) : (num + 0.5))
(How to round floating point numbers to the nearest integer in C?) 进行舍入,但我需要在点后使用浮点数和精度来表示三位数字。 例子: 254.450 应该四舍五入到 255。 254.432 应向下舍入为 254 254.448 应向下舍入为 254 等等。
注意:这就是我所说的“3 位”点后的粗体数字。
我相信它应该比 roundf() 更快,因为当我需要计算轮数时,我使用了数十万轮。你有一些提示如何做到这一点?我试图搜索roundf的来源,但没有找到。
注意:我需要它用于 RGB2HSV 转换功能,所以我认为 3 位数应该足够了。我使用正数。
【问题讨论】:
-
您要求“该点后的三位数字”,但您提供的所有三个示例都在该点后向下舍入到零位。什么?
-
我认为你误解了四舍五入。为什么254.450会四舍五入到255?
-
圆形 0.45 到 0.5 和 0.5 到 1 所以 254 + 1 是 255
-
只需将公式中的 0.5 更改为其他值即可调整舍入截止点
-
254.450通常不能精确地表示为float。最接近的float是254.4499969482421875000...,它根据您的方法四舍五入到254.4-->254.0。