You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何NSString的floatValue方法对"NaN"返回0而非NaN?

NSString的floatValue/doubleValue处理"NaN"返回0而非NaN的原因
  • 这不是编译器设置导致的,完全是Foundation框架中NSString数值转换方法的设计逻辑问题。
  • NSString的floatValue、doubleValue方法仅支持解析标准十进制格式的字符串,对于"NaN"、"Infinity"这类IEEE 754标准定义的特殊浮点值的字符串表示,这些方法不会做识别,解析失败时就默认返回0。
  • 而Swift的Float/Double初始化器是基于符合IEEE 754标准的浮点解析逻辑实现的,因此能正确识别"NaN"并返回对应的特殊浮点值。

Objective-C中正确解析"NaN"的方法

方法1:使用标准C函数

// 解析double类型的NaN
const char *str = [@"NaN" UTF8String];
double dValue = strtod(str, NULL);
// 解析float类型的NaN
float fValue = strtof(str, NULL);

方法2:使用NSNumberFormatter

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.allowsFloats = YES;
// 必须使用POSIX locale避免区域设置影响解析
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
NSNumber *number = [formatter numberFromString:@"NaN"];
double dValue = [number doubleValue];
float fValue = [number floatValue];

内容的提问来源于stack exchange,提问作者Udo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:34:53