如何在Objective-C中进行string转换?

我想将一个string转换成一个双精度,并在做了一些math运算后,将其转换回一个string。

我如何在Objective-C中做到这一点?

有没有办法将一个double加到最接近的整数呢?

你可以将NSString转换为double

double myDouble = [myString doubleValue]; 

舍入到最接近的int可以完成

 int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5)) 

我真的不知道是否有一个更简单的方法来转换回string比

 NSString* myNewString = [NSString stringWithFormat:@"%d", myInt]; 

要真正从string转换为数字,需要使用为读取string的语言环境configuration的NSNumberFormatter实例。

不同的区域设置会以不同的格式编号 例如,在世界的一些地方, COMMA被用作十进制分隔符,而在其他COMMA则被用作PERIOD – 并且千位分隔符(当被使用时)被颠倒。 除了它是一个空间。 或者根本不存在。

这真的取决于input的来源。 最安全的做法是configuration一个NSNumberFormatter的input格式,并使用-[NSFormatter numberFromString:]从它得到一个NSNumber 。 如果你想处理转换错误,你可以使用-[NSFormatter getObjectValue:forString:range:error:]来代替。

添加到olliej的答案,你可以从一个int转换回一个string与NSNumberstringValue

 [[NSNumber numberWithInt:myInt] stringValue] 

NSNumber上的stringValue调用descriptionWithLocale:nil ,给你一个值的本地化string表示。 我不确定是否[NSString stringWithFormat:@"%d",myInt]会给你一个myInt的正确本地化的myInt

olliej的舍入方法对于负数是错误的

  • 2.4圆angular是2(olliej的方法得到这个权利)
  • -2.4舍入为-2(olliej的方法返回-1)

这是一个替代scheme

  int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5)) 

你当然可以使用math.h中的舍入函数

下面是一个NSNumberFormatter读取本地化的数字string(xCode 3.2.4,osX 10.6)的工作示例,以节省其他人刚刚花费的时间。 注意:虽然它可以处理尾随空格,例如“8,765.4”,但这不能处理前导空白,并且不能处理stream浪的文本字符。 (坏inputstring:“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 
 // 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]; 

四舍五入,你应该使用math.h中定义的C函数。

 int roundedX = round(x); 

按住Option,然后双击Xcode中的round ,它会向您显示具有各种函数的手册页,用于舍入不同的types。

对于从数字到string的转换,如何使用新的文字语法(XCode> = 4.4),它更紧凑一些。

 int myInt = (int)round( [@"1.6" floatValue] ); NSString* myString = [@(myInt) description]; 

(把它作为NSNumber装箱,并使用NSObjects的描述方法转换为string)

这是我所知道的最简单的方法:

 float myFloat = 5.3; NSInteger myInt = (NSInteger)myFloat; 

从这个例子来看,你可以看到转换的两种方式:

 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); 

将在文本字段中input的文本转换为整数

 double mydouble=[_myTextfield.text doubleValue]; 

四舍五入到最接近的一倍

 mydouble=(round(mydouble)); 

四舍五入到最接近的整数(只考虑正值)

 int myint=(int)(mydouble); 

从double转换为string

 myLabel.text=[NSString stringWithFormat:@"%f",mydouble]; 

要么

 NSString *mystring=[NSString stringWithFormat:@"%f",mydouble]; 

从int转换为string

 myLabel.text=[NSString stringWithFormat:@"%d",myint]; 

要么

 NSString *mystring=[NSString stringWithFormat:@"%f",mydouble]; 

我结束了使用这个方便的macros:

 #define STRING(value) [@(value) stringValue]