如何在不使用numberfromstring的情况下将NSString转换为NSNumber

时间:2010-07-02 06:28:51

标签: ios4 nsstring nsnumber

我想在不使用numbreFromString:方法的情况下将NSString转换为NSNumber? numbreFromString:metgod在4.0中表现得很奇怪。所以我想使用替代方法将NSString转换为NSNumber。请帮助我......

+ (NSString *)formatText:(NSString *) text withLocalSettings:(BOOL) isLacale {  

    NSNumber *aNsNumber= [numberFormatter numberFromString: text];  
    NSString *returnString = [NSString stringWithString:[numberFormatter stringForObjectValue:aNsNumber]];

    if(isLacale) {
        return returnString;
    }
    else {
        return [NSString stringWithFormat:@"%lf",[aNsNumber doubleValue]];
    }
} 

0

我正在开发一个应用程序,我需要在3.0和4.0中运行我的应用程序。我有一个文本字段,当我尝试在文本字段中输入数字时,行为就像这样...在3.0中: - 它允许输入7位数和2个小数值(我已经格式化了这样)。我根据所选国家/地区对数字以及逗号分隔进行了格式化和本地化。它在3.0和3.1.2

中完美运行

IN 4.0: - 它允许您只输入4个数字,输入第5个数字后,它会使文本字段为空。当您输入第5个数字时没有显示任何内容,当您输入第6个数字时,它从第1个数字开始并继续相同的直到4个数字。例如: - 当你输入1234时,显示文本字段 - 1234,当你输入12345时,文本字段显示为“”。当你现在输入6时,它以6开始,依此类推......

我正在使用NSNumberFormatter和numberfromstring方法格式化在文本字段中输入的值。

我无法理解为什么会这样发生......请帮助我......

2 个答案:

答案 0 :(得分:16)

[NSNumber numberWithInteger:[theString integerValue]];
[NSNumber numberWithDouble:[theString doubleValue]];

还有floatValue,intValue,longLongValue,boolValue

编辑:

删除逗号,在执行上述操作之前使用stringByReplacingOccurrencesOfString。

theString = [theString stringByReplacingOccurrencesOfString:@"," withString:@""];

删除多个字符,你可以使用componentsSeparatedByCharactersInSet。

theSet = [NSCharacterSet characterSetWith...];
theString = [[theString componentsSeparatedByCharactersInSet:theSet] componentsJoinedByString:@""];

答案 1 :(得分:0)

iOS4在数字格式化方面非常挑剔。

在示例代码中传入区域设置 - 确保字符串中的小数分隔符与区域设置中定义的内容一致。确保输入格式正确的数字(iOS4)id est九千应该是9.000而不是9000如果你使用的是DecimalStyle。

如果你坚持使用替代解析器 - sscanf可以选择atoi。

使用标准c lib的sscanf和formatter或atoi,具体取决于你需要转换的数字。

#include<stdio.h>

int main(int argc, char **argv) {

   char s[] = "1.2";
   double x;

   sscanf(s, "%lf", &x);
   printf("The decimal number was %g\n\n", x);

   return 1;
}

atoi接受一个包含整数的字符串,并将该值作为int返回。