2012-10-25 50 views
0

也许这是一个愚蠢的问题,但我真的无法得到它。出于某种原因,我的程序中的float值在赋值语句中被取整。如何防止在Objective-C中舍入浮点数?

下面是代码:

Float64 time,test; 

for(Shot *sh in _arrayOfShots) 
{ 
    time = sh.bFrameTime; 
    // right here time variable gets value rounded up to 2 decimal places 
    // for example: if sh.bFrameTime = 81.919998 => time = 81.92 

    NSNumber *num = [NSNumber numberWithFloat:time]; 

    test = [num floatValue]; 

    [edgeTime addObject:num]; 
} 

// this is my Shot object structure 

@interface Shot : NSObject 
{ 
    int bFrame; 
    int eFrame; 

    Float64 bFrameTime; 
} 

如果有人知道如何解决这个问题,请给我提示!

谢谢!

+1

你如何检查它是什么以及它是什么? –

+0

我想你可以看到调试器中的值;) –

+0

你在调试器中检查两个值? –

回答

1

81.919998 =>时间减去它的语句= 81.92

不是“圆最多保留两位小数“。两者的差值为0.000002,0.0000000244的大小变化或约8位小数位数。如果你的源值是单精度浮点数,那么它只有7个小数位的精度。 (但你没有显示那个声明,所以我们不知道)

这种差异也可能与你如何显示这两个值有关,因为NSLog做了一些四舍五入的处理。

+0

他没有显示什么声明?我为投稿假设投票(因此我对原文发表评论)。 –

+0

是的,我错过了他在其他代码下面的声明。所以这可能只是演示。 NSLog将会像这样圆。 –

+0

伙计们......我正在查看调试器中的时间值,它们与Shot对象内部的实际值相同......并且它们有所不同...至于上面的答案说的是精确度的7个小数位数,我将现在检查一些其他值。 –

0

添加的,如果在您检查圆润数量比初始数量较大,如果是由1

+1

我已经重读了你的声明五次现在,我仍然不知道你到底在说什么。 –

+0

是啊......我都没有:) –

+0

Probavly误读,我以为你想圆整到一个整数 – Graknol