提问人:Udo 提问时间:5/5/2023 最后编辑:Udo 更新时间:5/5/2023 访问量:47
为什么 NSString floatvalue 为 “NaN” 返回 0?
Why NSString floatvalue return 0 for "NaN"?
问:
为什么我没有得到 NaN?0 是错误的。也许是编译器设置?
CGFloat fValue = [@"NaN" floatValue]; // fValue is 0
double ddd = [@"NaN" doubleValue]; // also 0`
编辑:奇怪,在 swift 中,这有效并返回 nan:
let fValue = Float ("NaN")
let ddd = Double ("NaN")
答:
1赞
son
5/5/2023
#1
它写在文档上。这是针对浮点值的,与双精度值相同。
https://developer.apple.com/documentation/foundation/nsstring/1412321-floatvalue
此属性在字符串的开头不包含空格。此属性在溢出时为 HUGE_VAL 或 –HUGE_VAL,在下溢时为 0.0。如果字符串不以浮点数的有效文本表示形式开头,则此属性为 0.0。
评论
0赞
Udo
5/5/2023
NaN 的有效文本表示形式是什么?Swift 知道这一点,C# 也知道这一点。
0赞
son
5/5/2023
如果您将“NaN”转换为 Float,它是有效的,因为 Float 符合 LosslessStringConvertible 协议,该协议允许您将 “inf” 转换为无穷大或将 “NaN” 转换为 nan。查看 Swift.Math.Floating Foundation。
0赞
Udo
5/5/2023
好的,我知道在转换为浮点之前,我必须检查字符串中的“NaN”。
0赞
son
5/5/2023
如果你想在 Objective-c 上创建一个“nan”,就像 double nan = NAN 一样简单。有一个宏来表示它。
-2赞
Hao Liang
5/5/2023
#2
float 的字符串 “NaN” 为 0。
0是对的,你是错的。
评论
0赞
Udo
5/5/2023
为什么?在 swift 中,“NaN”是 nan,在 C# 中,“NaN”也是双精度。南
评论
double ddd = NAN;
double ddd = atof("NaN");
Float
Double
NSString
NSNumber
NSString
String
floatValue
doubleValue