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