浮点东西工作......大部分时间

时间:2012-11-20 17:50:26

标签: objective-c ios floating-point nsstring

  

可能重复:
  Correcting floating point numbers

float randNum = arc4random()%(100)-1;

我在某处读到这会给我1-100之间的随机数。或者接近那个。

此行似乎一直有效,但我将此数字转换为NSString以进行存储/打印到文本,然后将其转换回浮点数以进行排序和其他计算。但是,当我得到那个漂浮的时候,它看起来有点像胡言乱语;在变量视图中这样:

9   float   9.75303731e-41   

为什么转换为NSString并返回浮动会破坏我正在使用的浮点值? (例如,我可以搞砸了什么?或者我应该使用CGFloat?)

我认为这是所有相关的代码:

NSMutableArray *stringArray = [[NSMutableArray alloc] init];
floatArray[30];
// put three random floats into an NSMutableArray of NSStrings
for(int i = 0; i < 3; i++)
{
    float randNum = arc4random()%(100)-1;
    NSString *randString = [NSString stringWithFormat:@"%.3f", randNum];
    [stringArray addObject:randString];
}

// convert NSStrings back to float
for(NSString *string in stringArray)
{
    float temp = [string floatValue];
    floatArray[iterator] = temp;
}

提前感谢您的任何帮助/建议。

编辑:当我逐步执行代码时,看起来浮点值看起来很清晰,直到“float temp = [string floatValue]”这一行,这就是值似乎被包含的地方。

1 个答案:

答案 0 :(得分:1)

当arc4random()的结果是uint32_t时,为什么使用float?切换到整数类型几乎肯定会绕过这一切,因为我怀疑问题是因为转换为字符串形式只允许3位有效数字。如果您使用%。15f作为格式会发生什么?

旁注:使用arc4random_uniform() - 它更简单,并保证在该范围内是均匀随机分布。

相关问题