How to do string conversions in Objective-C?
我想把一个字符串转换成一个双精度字符串,在对它做了一些数学运算后,将它转换回一个字符串。
如何在Objective-C中执行此操作?
有没有办法把一个双精度数也四舍五入为最接近的整数?
可以将nsstring转换为double,
1 | double myDouble = [myString doubleValue]; |
四舍五入到最近的整数,然后可以这样做
1 | int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5)) |
老实说,我不确定是否有比
1 | NSString* myNewString = [NSString stringWithFormat:@"%d", myInt]; |
要正确地将字符串转换为数字,您需要使用为从中读取字符串的区域设置配置的
不同的地区将不同的格式数字。例如,在世界上的某些地方,
这实际上取决于输入的来源。最安全的做法是为您的输入格式配置一个
除了Olliej的答案外,您还可以使用
1 | [[NSNumber numberWithInt:myInt] stringValue] |
下面是一个nsnumberFormatter的工作示例,它读取本地化的数字字符串(xcode 3.2.4,osx 10.6),以节省其他人刚刚花在这上面的时间。注意:虽然它可以处理诸如"8765.4"之类的尾随空格,但它不能处理前导空格,也不能处理多余的文本字符。(错误的输入字符串:"8"和"8q"以及"8q"。)
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
Olliej的舍入方法对于负数是错误的
- 2.4四舍五入为2(Olliej的方法是正确的)
- ?2.4四舍五入是?2(Olliej方法返回-1)
这是另一种选择
1 | int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5)) |
你当然可以用数学中的四舍五入函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // Converting String in to Double double doubleValue = [yourString doubleValue]; // Converting Double in to String NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue]; // .20f takes the value up to 20 position after decimal // Converting double to int int intValue = (int) doubleValue; or int intValue = [yourString intValue]; |
对于从数字到字符串的转换,如何使用新的文本语法(xcode>=4.4),它有点紧凑。
1 2 3 | int myInt = (int)round( [@"1.6" floatValue] ); NSString* myString = [@(myInt) description]; |
(将其装箱为nsnumber,并使用nsObjects的描述方法转换为字符串)
对于舍入,您可能应该使用math.h中定义的C函数。
1 | int roundedX = round(x); |
按住选项,双击xcode中的
将文本字段中输入的文本转换为整数
1 | double mydouble=[_myTextfield.text doubleValue]; |
四舍五入到最近的双精度
1 | mydouble=(round(mydouble)); |
四舍五入到最近的整数(只考虑正值)
1 | int myint=(int)(mydouble); |
从double转换为string
1 | myLabel.text=[NSString stringWithFormat:@"%f",mydouble]; |
或
1 | NSString *mystring=[NSString stringWithFormat:@"%f",mydouble]; |
从int转换为string
1 | myLabel.text=[NSString stringWithFormat:@"%d",myint]; |
或
1 | NSString *mystring=[NSString stringWithFormat:@"%f",mydouble]; |
最后我使用了这个方便的宏:
1 | #define STRING(value) [@(value) stringValue] |
在此示例中,您可以看到两种转换方式:
1 2 3 4 5 6 7 8 9 10 | NSString *str=@"5678901234567890"; long long verylong; NSRange range; range.length = 15; range.location = 0; [[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong]; NSLog(@"long long value %lld",verylong); |
这是我所知道的最简单的方法:
1 2 | float myFloat = 5.3; NSInteger myInt = (NSInteger)myFloat; |