-2

我有一个应用程序,其中我正在使用某个类,该类具有将当前经过时间返回给我的方法。

unsigned long long getCurrentElapsedTime(){
}

Unsigned long long使用而不是float在上述类中,因为float在运行一段时间(约 1 小时)后包装(更改为 expo 形式)。早些时候,我为float我的程序使用了返回秒数(1.112、1.336 等)的类中的方法。

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 longfloat以免得到指数格式的数字。对于我的应用程序,我之前使用float具有以下格式数字(1.123、2.345、3.737 等)

如果我尝试将一个很长的unsigned long long数字转换为浮点数,我可能会再次遇到同样的问题(并且浮点数将采用博览会形式)我该如何解决这个问题?有没有类似的小数点,我可以在unsigned long long不涉及包装问题的情况下转换成小数点?

4

1 回答 1

0

Float 不会“更改”为任何“expo fo”。事实上,一个unsigned long long意志会在某个时候溢出并返回到 0。A不会float。如果您添加的增量太小,它将不再与之前的浮点值不同。浮点数是有损的,但它可以表示诸如“无限”之类的值。long 是无损的,但是是有限的。

可能是您的输出函数以一定比例更改格式。但这是你如何打印数字的问题!

# 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

相同的编号,不同的输出

但是,您的时间来源是什么?使用时间源的本机类型(可能是 a long)您不能仅通过将其转换为另一种类型来提高精度。

于 2013-03-08T08:31:58.873 回答