【问题标题】:Floating Point things work.....Most of the time [duplicate]浮点的东西工作.....大部分时间[重复]
【发布时间】:2025-12-29 04:25:16
【问题描述】:

可能重复:
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]”行,这就是值似乎被垃圾的地方。

【问题讨论】:

  • 不转换成NSString,为什么不转换成NSNumber并保存在数组中,然后从NSNumber对象中取回呢?
  • ACB - 感谢您的建议。我会试试的。 Inafziger - 感谢您发布可能的副本。我会尝试 ACB 的建议。
  • 你为什么要减1? arc4random()%(100) 返回一个 0-99 之间的数字,因此您应该 1 以向上移动到 1-100。
  • 再次,我在网上找到的代码。

标签: objective-c ios floating-point nsstring


【解决方案1】:

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

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

【讨论】: