我想将字符串转换为双精度型,并对其进行一些数学运算后,将其转换回字符串。
如何在Objective-C中执行此操作?
是否也可以将双精度舍入到最接近的整数?
我想将字符串转换为双精度型,并对其进行一些数学运算后,将其转换回字符串。
如何在Objective-C中执行此操作?
是否也可以将双精度舍入到最接近的整数?
Answers:
您可以将NSString转换为double
double myDouble = [myString doubleValue];
然后可以舍入到最接近的int
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
老实说,我不确定是否存在比将字符串转换回字符串更简化的方法
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
[[NSNumber numberWithInt:myInt] stringValue]
要真正将字符串正确地转换为数字,您需要使用NSNumberFormatter
从中读取字符串的语言环境的configure 实例。
不同的区域设置将以不同的方式格式化数字。例如,在世界上的某些地区,COMMA
它用作小数点分隔符,而在另一些地方,则用作小数点分隔符,而PERIOD
千位分隔符(使用时)则相反。除非是空间。还是根本不存在。
这实际上取决于输入的来源。最安全的做法是NSNumberFormatter
为输入的格式设置一种格式,并用于-[NSFormatter numberFromString:]
从中获取格式NSNumber
。如果要处理转换错误,则可以-[NSFormatter getObjectValue:forString:range:error:]
改用。
除了olliej的答案外,您还可以使用NSNumber
s 从int转换回字符串stringValue
:
[[NSNumber numberWithInt:myInt] stringValue]
stringValue
在NSNumber
invokes上descriptionWithLocale:nil
,为您提供值的本地化字符串表示形式。我不确定是否[NSString stringWithFormat:@"%d",myInt]
会给您适当的本地化表示形式myInt
。
这是一个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
nil
值NSNumber*
。我无法重现您在使用领先空格和杂散字符时遇到的问题,IMO,它工作正常。" 28.5 "
解析为28.5,和"gibberish28.5"
,"28.5gibberish"
和"gibberish28.5gibberish"
都无法解析的; " 2 8 . 5. "
是无法解析的,但这并不罕见。
// 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),它更紧凑。
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
(将其作为NSNumber装箱并使用NSObjects的description方法转换为字符串)
将在文本字段中输入的文本转换为整数
double mydouble=[_myTextfield.text doubleValue];
四舍五入到最接近的两倍
mydouble=(round(mydouble));
四舍五入到最接近的整数(仅考虑正值)
int myint=(int)(mydouble);
从双精度转换为字符串
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];