2010-10-28 109 views
0

这是我的问题,我有几个参数需要增加0.1。 但我的用户界面只渲染x.x,x.xx,x.xxx用于浮点数,因为0.1f并不是真的0.1,但长期来看类似于0.10000000149011612,我的用户界面会呈现-0.00,这没有多大意义。如何防止所有可能的UI情况。浮点增加UI的精度问题

谢谢。

+0

我不确定我是否理解。为什么你的用户界面显示'0.1f'为'“-0.00”'? – 2010-10-28 19:08:50

+0

也许你不应该使用浮点数......如果你想0.1精确的话,可以使用整数类型。 – JoshD 2010-10-28 19:09:40

+0

@Oli它不是0.1的增量。 – DogDog 2010-10-28 19:20:47

回答

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); 
打开四舍五入成一个独立的功能,并从增量解耦它是非常有用
6

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