【发布时间】:2012-07-23 03:56:15
【问题描述】:
我正在尝试创建一个值数组。这些值应该是“2.4,1.6,.8,0”。我每一步都减去 0.8。
这就是我的做法(代码 sn-p):
float mean = [[_scalesDictionary objectForKey:@"M1"] floatValue]; //3.2f
float sD = [[_scalesDictionary objectForKey:@"SD1"] floatValue]; //0.8f
nextRegion = mean;
hitWall = NO;
NSMutableArray *minusRegion = [NSMutableArray array];
while (!hitWall) {
nextRegion -= sD;
if(nextRegion<0.0f){
nextRegion = 0.0f;
hitWall = YES;
}
[minusRegion addObject:[NSNumber numberWithFloat:nextRegion]];
}
我得到这个输出:
minusRegion = (
"2.4",
"1.6",
"0.8000001",
"1.192093e-07",
0
)
我不希望 0.8 和 0 之间的数字非常小。是否有截断这些值的标准方法?
【问题讨论】:
-
我的意思是截断平均值和标准差,所以它们不会给我非常小的值。
-
我编辑了我的答案,以展示使用 floorf 函数执行此操作的简单方法
-
我很困惑为什么 0.8 的浮点表示的尾数是 1.100110011001...(重复)而不是精确的 1.100100000000。 (.8 以浮点数表示时存储为 1.6 * 2^-1。选择的 1.6 在不太重要的位中有一些古怪,这导致问题中出现错误)
-
我认为发生了一些奇怪的事情。我主要关心的是找到一个实用的解决方案,但我也有兴趣了解官方原因/解释。
标签: objective-c ios c floating-point