我有一个应用程序,我正在使用某个类,它有一个方法可以将当前经过的时间返回给我。
unsigned long long getCurrentElapsedTime(){
}
在上面的类中使用 Unsigned long long
代替float
因为float
在运行一段时间(~1小时)后换行(更改为expo表单)。
之前,我使用的是返回float
秒(1.112,1.356等)的类中的方法。
float getElapsedTime(){
}
我在程序中使用上述方法如下:
float startTime, deltaTime;
starttime = getElapsedTime();
On Some event
deltaTime = getElapsedtime() - startTime;
if(deltaTime > 1.0f){
//do something
}
我现在有这个getCurrentElapsedTime()
方法,它会向我返回unsigned long long
整数,直到很长时间才会被包裹。
我必须在我的应用程序中使用此方法,类似于我使用float,但我很困惑我应该如何将unsigned long long
转换为float
,以便我不会获得指数格式数字。
对于我的应用程序,我之前使用的float
具有以下格式数字(1.123,2.354,3.737等)
如果我有一个非常长的unsigned long long
数字,我试图转换为浮点数,我可能会再次遇到同样的问题(并且浮点数将以展示形式)
我该如何解决这个问题?是否有类似的小数点,我可以转换为unsigned long long
而不会陷入包装问题?
答案 0 :(得分:0)
Float不会“改变”任何“expo fo”。事实上,unsigned long long
会在某个时刻溢出并且换行会回到0. float
不会。如果添加的增量太小,它将不再与之前的浮点值不同。浮点数是有损的,但它可以表示诸如“无限”之类的值。长期无损,但有限。
可能是您的输出功能以一定比例更改格式。但这是你打印你的数字的问题!
# Don't mind the python syntax, please:
print "Different format strings: %.3f %e %f" % (1.0, 1.0, 1.0)
Different format strings: 1.000 1.000000e+00 1.000000
相同数字,不同输出
然而,你的时间来源?使用原生类型的时间源(可能是long
)只是将其转换为其他类型,无法提高精度。