Float会增加UI的精度问题

时间:2010-10-28 19:04:34

标签: c++

这是我的问题,我有几个参数需要增加0.1。 但是我的UI只为浮点数渲染x.x,x.xx,x.xxx,所以因为0.1f不是0.1,但从长远来看就像0.10000000149011612我的ui将呈现-0.00并且这没有多大意义。如何防止所有可能的UI案例。

谢谢。

2 个答案:

答案 0 :(得分:6)

在显示之前使用整数并除以10(或1000等...)。你的参数将存储整数十分之一,你将它们增加十分之一。

答案 1 :(得分:3)

如果您知道浮点值始终是0.1的倍数,则可以在每次递增后对其进行舍入,以确保它保持合理的值。它仍然不准确(因为它在物理上不可能),但至少错误不会累积,它将正确显示。

而不是:

x += delta;

执行:

x = floor((x + delta) / precision + 0.5) * precision;

编辑:将舍入转换为独立函数并将其与增量分离是很有用的:

inline double round(double value, double precision = 1.0)
{
    return floor(value / precision + 0.5) * precision;
}

x = round(x + 0.1, 0.1);