如何在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与NSNumber
的stringValue
:
[[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]