2011-02-23 2 views
0

내 앱에는 임의의 소수 숫자가 있습니다. 번호를 자르고 UILabel에 표시하려면 0의 시작 부분을 어디에서 결정해야합니까?플로트 번호의 첫 번째 0이 어디인지 확인

그래서 예를 들어 3.05가 있으면 3.05000으로 표시되지만 제대로 표시하려면 '3.05'입니다.

+0

기존 코드의 스 니펫을 게시하여 답변을 이미 수행중인 작업에만 적용 할 수 있습니까? –

+0

항상 0으로 끝나는 것은 아니며, 특히 0으로 끝나는 것은 아닙니다. 예를 들어, 1.999999998 또는 뭔가 얻을 수 있습니다. Dean의 말처럼 형식 지정자를 사용하십시오. –

+0

@Jesse Rusak 제로만을 없앨 필요가 있습니다 ... – Knodel

답변

3

가장 쉬운 방법은 같은 @ 길이 제한을 사용하는 것이다.

NSString* string = [[NSString stringWithFormat: @"%f", 3.05000000] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @"0"]]; 

는 @ ". % 2F는"3.05

당신이해야을 반환하면서 3.05001를 반환합니다 3.05

NSString* string = [[NSString stringWithFormat: @"%f", 3.0500100000] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @"0"]]; 

를 반환합니다하지만 난 당신이 림 제로 원한다면 당신이 사용한다고 생각합니다 반올림 오류를 알아 두십시오. 따라서 3.05000000010000 문자열의 경우 3.05 문자열이 반환됩니다.

+0

당신의 대답이 내 것보다 낫다고 생각합니다. ( – deanWombourne

+0

@deanWombourne 그것이 발생합니다 =) – Max

+0

고마워요! 정확히 내가 뭘 찾고 있었는지 – Knodel

2

사용 format specifiers :

// Print max two numbers after the decimal point 
NSString *string = [NSString stringWithFormat:@"%.2f", number]; 

당신이 첫 번째 공의 위치를 ​​해결 문자열로 렌더링 한 후 첫 번째 '0'에 대한 해당 문자열을 검색해야하는 경우

+0

그러나 첫 번째 '0'으로 트리밍하려면 내 예제를 참조하십시오. Max는 더 나은 것으로 생각되는'stringByTrimmingCharactersInSet'을 사용하여 좋은 대답을했습니다! – deanWombourne

+0

감사합니다! 그러나, 맥스의 대답은 나를 위해 더 좋습니다 :) – Knodel

+0

글쎄, 그것은 더 나은 대답입니다;) – deanWombourne

0

// Render the complete string 
NSString *completeNumber = [NSString stringWithFormat:@"%f", number]; 

// Get the first 0 
NSRange range = [completeNumber rangeOfString:@"0"]; 

// Trim the string 
NSString myString = [completeNumber substringWithRange:NSMakeRange(0, range.location)]; 
는 시도가 :

NSString* myNumber = [NSString stringWithFormat:@"%.02f", number]; 

2 진수 :

@"%.02f" = 3.05 

자리 3 ". % 2F"

@"%.03f" = 3.050 
+0

문제는 내가 필요한 자릿수를 알 수 없다는 것입니다. 매번 숫자가 다릅니다. – Knodel

0

질문에 문제가 있습니다. 해당 플로트에 0이 반복되지 않습니다. 보다 구체적으로, 3.05의 부동 소수점 표현은 실제로 3.05와 동일하지 않습니다. 실제로는 3.049999999999992236431605997495353221893310546875와 비슷합니다. 최선의 방법은 NSDecimalNumber와 문자열 변환 방법과 같은 것을 사용하는 것입니다. 이진 부동 소수점과 달리 10 진수를 정확하게 나타낼 수 있습니다.

+0

64 비트 부동 소수점 숫자를 사용하더라도 17 개의 유효 숫자 만 얻을 수 있습니다.그러나 나는 당신이 과장을 사용하여 유효한 점을 만들고 있음을 이해합니다. –