Program Tip

NSString을 NSNumber로 변환하는 방법

programtip 2020. 10. 3. 11:33
반응형

NSString을 NSNumber로 변환하는 방법


어떻게 a를 변환 할 수 있습니다 NSString(예를 들어, 모든 원시 데이터 유형의 다수 포함 int, float, char, unsigned int, 등)? 문제는 런타임에 문자열에 어떤 숫자 유형이 포함 될지 모르겠다는 것입니다.

나는 그것을하는 방법을 알고 있지만 이것이 어떤 유형, 서명되지 않은 부동 소수점 값에서도 작동하는지 확실하지 않습니다.

long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber]; 
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];

도와 주셔서 감사합니다.


사용 NSNumberFormatter:

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *myNumber = [f numberFromString:@"42"];

문자열이 유효한 숫자가 아닌 경우, 다음 myNumber될 것입니다 nil. 유효한 숫자라면 이제 NSNumber실제로 어떤 종류의 숫자인지 알아낼 수 있는 모든 장점이 있습니다.


당신은 사용할 수 있습니다 -[NSString integerValue], -[NSString floatValue]등 그러나,이 작업을 수행하는 올바른 (로케일에 의존하는 등) 방법을 사용하는 것입니다 -[NSNumberFormatter numberFromString:]의 설정의 NSNumber 해당 로케일로 변환을 포기하고 주어진 것이다 NSNumberFormatter는 부동 허용 여부 (를 포함하여 포인트 값).


목표 -C

(참고 :이 방법은 로케일이 다르면 잘 작동하지 않지만 a보다 약간 빠릅니다. NSNumberFormatter)

NSNumber *num1 = @([@"42" intValue]);
NSNumber *num2 = @([@"42.42" floatValue]);

빠른

간단하지만 더러운 방법

// Swift 1.2
if let intValue = "42".toInt() {
    let number1 = NSNumber(integer:intValue)
}

// Swift 2.0
let number2 = Int("42')

// Swift 3.0
NSDecimalNumber(string: "42.42") 

// Using NSNumber
let number3 = NSNumber(float:("42.42" as NSString).floatValue)

확장 방식 이것은 로케일 및 소수와 잘 어울리기 때문에 실제로 더 좋습니다.

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.number(from: self)
    }
}

이제 간단하게 다음을 수행 할 수 있습니다.

let someFloat = "42.42".numberValue
let someInt = "42".numberValue

정수로 시작하는 문자열의 경우 예를 들어, @"123", @"456 ft", @"7.89", 등, 사용 -[NSString integerValue].

그래서, @([@"12.8 lbs" integerValue])일 같다 [NSNumber numberWithInteger:12].


다음과 같이 할 수도 있습니다.

NSNumber *number = @([dictionary[@"id"] intValue]]);

즐기세요!


정수를받는 것을 알고 있다면 다음을 사용할 수 있습니다.

NSString* val = @"12";
[NSNumber numberWithInt:[val intValue]];

Here's a working sample of NSNumberFormatter reading localized number NSString (xCode 3.2.4, osX 10.6), to save others the hours I've just spent messing around. Beware: while it can handle trailing blanks ("8,765.4 " works), this cannot handle leading white space and this cannot handle stray text characters. (Bad input strings: " 8" and "8q" and "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

I wanted to convert a string to a double. This above answer didn't quite work for me. But this did: How to do string conversions in Objective-C?

All I pretty much did was:

double myDouble = [myString doubleValue];

Thanks All! I am combined feedback and finally manage to convert from text input ( string ) to Integer. Plus it could tell me whether the input is integer :)

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:thresholdInput.text];

int minThreshold = [myNumber intValue]; 

NSLog(@"Setting for minThreshold %i", minThreshold);

if ((int)minThreshold < 1 )
{
    NSLog(@"Not a number");
}
else
{
    NSLog(@"Setting for integer minThreshold %i", minThreshold);
}
[f release];

I think NSDecimalNumber will do it:

Example:

NSNumber *theNumber = [NSDecimalNumber decimalNumberWithString:[stringVariable text]]];

NSDecimalNumber is a subclass of NSNumber, so implicit casting allowed.


What about C's standard atoi?

int num = atoi([scannedNumber cStringUsingEncoding:NSUTF8StringEncoding]);

Do you think there are any caveats?


You can just use [string intValue] or [string floatValue] or [string doubleValue] etc

You can also use NSNumberFormatter class:


you can also do like this code 8.3.3 ios 10.3 support

[NSNumber numberWithInt:[@"put your string here" intValue]]

NSDecimalNumber *myNumber = [NSDecimalNumber decimalNumberWithString:@"123.45"];
NSLog(@"My Number : %@",myNumber);

Worked in Swift 3

NSDecimalNumber(string: "Your string") 

I know this is very late but below code is working for me.

Try this code

NSNumber *number = @([dictionary[@"keyValue"] intValue]]);

This may help you. Thanks


Try this

NSNumber *yourNumber = [NSNumber numberWithLongLong:[yourString longLongValue]];

Note - I have used longLongValue as per my requirement. You can also use integerValue, longValue, or any other format depending upon your requirement.


extension String {

    var numberValue:NSNumber? {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        return formatter.number(from: self)
    }
}

let someFloat = "12.34".numberValue

참고URL : https://stackoverflow.com/questions/1448804/how-to-convert-an-nsstring-into-an-nsnumber

반응형