我想将一个字符串转换为一个双字符串,并在对其进行一些数学运算后,将其转换回字符串.
我如何在Objective-C中执行此操作?
有没有办法将double舍入到最接近的整数?
您可以将NSString转换为double
double myDouble = [myString doubleValue];
舍入到最近的int可以完成为
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
老实说,我不确定是否有更简化的方式转换回字符串
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
要真正正确地从字符串转换为数字,您需要使用NSNumberFormatter
为您正在读取字符串的语言环境配置的实例.
不同的区域设置将以不同的方式格 例如,在世界的某些地方,COMMA
用作小数点分隔符,而在其他地方PERIOD
用作 - 和千位分隔符(使用时)相反.除非它是一个空间.或根本不存在.
这实际上取决于输入的来源.最安全的做法是配置一个NSNumberFormatter
输入格式化的方式,并用它-[NSFormatter numberFromString:]
来获取输入NSNumber
.如果您想处理转换错误,可以-[NSFormatter getObjectValue:forString:range:error:]
改用.
添加到olliej的答案,您可以使用NSNumber
's 将int转换回字符串stringValue
:
[[NSNumber numberWithInt:myInt] stringValue]
stringValue
在NSNumber
调用上descriptionWithLocale:nil
,为您提供值的本地化字符串表示.我不确定是否[NSString stringWithFormat:@"%d",myInt]
会给你一个适当的本地化代表myInt
.
对于负数,olliej的舍入方法是错误的
2.4舍入是2(olliej的方法得到这个权利)
-2.4舍入为-2(olliej的方法返回-1)
这是另一种选择
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
你当然可以使用math.h中的舍入函数
这是NSNumberFormatter读取本地化数字String(xCode 3.2.4,osX 10.6)的工作示例,以便为其他人节省我刚刚花费的时间.注意:虽然它可以处理诸如"8,765.4"之类的尾随空白,但它无法处理前导空格,并且无法处理杂散文本字符.(错误的输入字符串:"8"和"8q"和"8 q".)
NSString *tempStr = @"8,765.4"; // localization allows other thousands separators, also. NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init]; [myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default? [myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; // next line is very important! [myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial NSNumber *tempNum = [myNumFormatter numberFromString:tempStr]; NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'", tempStr, tempNum, [tempNum intValue]); [myNumFormatter release]; // good citizen