objective c - 如何在Objective-C中進行字符串轉換?




cocoa cocoa-touch (8)

我想將一個字符串轉換為一個double,並在對它進行一些數學運算後,將其轉換回字符串。

我如何在Objective-C中做到這一點?

有沒有辦法將double加到最接近的整數?


olliej的rounding方法對於負數是錯誤的

  • 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

將在文本字段中輸入的文本轉換為整數

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轉換為字符串

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

要么

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

對於從數字到字符串的轉換,如何使用新的文字語法(XCode> = 4.4),它更緊湊一些。

int myInt = (int)round( [@"1.6" floatValue] );

NSString* myString = [@(myInt) description];

(將其作為NSNumber並使用NSObjects的描述方法轉換為字符串)


我最終使用了這個方便的宏:

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

添加到olliej的答案,你可以從一個int轉換回一個字符串與NSNumberstringValue

[[NSNumber numberWithInt:myInt] stringValue]

NSNumber上的stringValue調用descriptionWithLocale:nil ,給你一個值的本地化字符串表示。 我不確定是否[NSString stringWithFormat:@"%d",myInt]會給你一個myInt的正確本地化myInt


要真正將字符串轉換為數字,需要使用為讀取字符串的語言環境配置的NSNumberFormatter實例。

不同的語言環境會將數字格式設置為不同。 例如,在世界的一些地區, COMMA被用作小數分隔符,而在其他COMMA則被用作PERIOD - 並且千位分隔符(在使用時)被顛倒。 除非是空間。 或根本不存在。

這真的取決於輸入的來源。 要做的最安全的事情是配置一個NSNumberFormatter用於輸入格式化和使用的方式-[NSFormatter numberFromString:]從中獲取NSNumber 。 如果你想處理轉換錯誤,你可以使用-[NSFormatter getObjectValue:forString:range:error:]來代替。


這是我知道的最簡單的方法:

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




cocoa-touch