如何转换包含许多原始数据类型的 NSString
(例如 int
, float
, char
, unsigned int
等)?问题是,我不知道字符串在运行时将包含哪种数字类型 .
我知道如何做到这一点,但我不确定这是否适用于任何类型,也是无符号和浮点值:
long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber];
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];
谢谢您的帮助 .
18 回答
试试这个
注意 - 我根据我的要求使用了longLongValue . 您还可以使用integerValue,longValue或任何其他格式,具体取决于您的要求 .
我知道这已经很晚了,但是下面的代码对我有用 .
试试这个代码
NSNumber *number = @([dictionary[@"keyValue"] intValue]]);
这可能对你有所帮助 . 谢谢
使用
NSNumberFormatter
:如果字符串不是有效数字,则
myNumber
将为nil
. 如果它是一个有效的数字,那么你现在拥有所有的NSNumber
善良,以确定它实际上是什么类型的数字 .您可以使用
-[NSString integerValue]
,-[NSString floatValue]
等 . 但是,正确的(区域设置敏感等)方法是使用-[NSNumberFormatter numberFromString:]
,这将为您提供从适当的区域设置转换的NSNumber并给出NSNumberFormatter
的设置(包括是否它将允许浮点值) .Objective-C
(注意:此方法对差异区域设置不起作用,但比
NSNumberFormatter
稍快)斯威夫特
Simple but dirty way
The extension-way 这更好,真的,因为它可以很好地与区域设置和小数一起使用 .
现在你可以简单地做:
对于以整数开头的字符串,例如
@"123"
,@"456 ft"
,@"7.89"
等,请使用-[NSString integerValue] .所以,
@([@"12.8 lbs" integerValue])
就像在做[NSNumber numberWithInteger:12]
.你也可以这样做:
玩得开心!
如果你知道你收到整数,你可以使用:
这是一个NSNumberFormatter的工作样本,读取本地化的数字NSString(xCode 3.2.4,osX 10.6),以节省其他人我刚刚花费的时间 . 注意:虽然它可以处理尾随空白(“8,765.4”工作),但它无法处理前导空格,这不能处理杂散文本字符 . (错误的输入字符串:“8”和“8q”和“8 q” . )
我想将字符串转换为double . 以上答案对我来说并不适用 . 但这样做了:How to do string conversions in Objective-C?
我所做的一切都是:
谢谢大家!我结合反馈,最后管理从文本输入(字符串)转换为整数 . 另外它可以告诉我输入是否是整数:)
我认为NSDecimalNumber会这样做:
例:
NSDecimalNumber是NSNumber的子类,因此允许隐式转换 .
C的标准
atoi
怎么样?你认为有什么警告吗?
您可以使用
[string intValue]
或[string floatValue]
或[string doubleValue]
等你也可以使用NSNumberFormatter类:
你也可以这样做代码8.3.3 ios 10.3支持
工作于 Swift 3