내 앱에는 임의의 소수 숫자가 있습니다. 번호를 자르고 UILabel에 표시하려면 0의 시작 부분을 어디에서 결정해야합니까?플로트 번호의 첫 번째 0이 어디인지 확인
그래서 예를 들어 3.05가 있으면 3.05000으로 표시되지만 제대로 표시하려면 '3.05'입니다.
내 앱에는 임의의 소수 숫자가 있습니다. 번호를 자르고 UILabel에 표시하려면 0의 시작 부분을 어디에서 결정해야합니까?플로트 번호의 첫 번째 0이 어디인지 확인
그래서 예를 들어 3.05가 있으면 3.05000으로 표시되지만 제대로 표시하려면 '3.05'입니다.
가장 쉬운 방법은 같은 @ 길이 제한을 사용하는 것이다.
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 문자열이 반환됩니다.
당신의 대답이 내 것보다 낫다고 생각합니다. ( – deanWombourne
@deanWombourne 그것이 발생합니다 =) – Max
고마워요! 정확히 내가 뭘 찾고 있었는지 – Knodel
사용 format specifiers :
// Print max two numbers after the decimal point
NSString *string = [NSString stringWithFormat:@"%.2f", number];
당신이 첫 번째 공의 위치를 해결 문자열로 렌더링 한 후 첫 번째 '0'에 대한 해당 문자열을 검색해야하는 경우
그러나 첫 번째 '0'으로 트리밍하려면 내 예제를 참조하십시오. Max는 더 나은 것으로 생각되는'stringByTrimmingCharactersInSet'을 사용하여 좋은 대답을했습니다! – deanWombourne
감사합니다! 그러나, 맥스의 대답은 나를 위해 더 좋습니다 :) – Knodel
글쎄, 그것은 더 나은 대답입니다;) – deanWombourne
// 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
문제는 내가 필요한 자릿수를 알 수 없다는 것입니다. 매번 숫자가 다릅니다. – Knodel
질문에 문제가 있습니다. 해당 플로트에 0이 반복되지 않습니다. 보다 구체적으로, 3.05의 부동 소수점 표현은 실제로 3.05와 동일하지 않습니다. 실제로는 3.049999999999992236431605997495353221893310546875와 비슷합니다. 최선의 방법은 NSDecimalNumber와 문자열 변환 방법과 같은 것을 사용하는 것입니다. 이진 부동 소수점과 달리 10 진수를 정확하게 나타낼 수 있습니다.
64 비트 부동 소수점 숫자를 사용하더라도 17 개의 유효 숫자 만 얻을 수 있습니다.그러나 나는 당신이 과장을 사용하여 유효한 점을 만들고 있음을 이해합니다. –
기존 코드의 스 니펫을 게시하여 답변을 이미 수행중인 작업에만 적용 할 수 있습니까? –
항상 0으로 끝나는 것은 아니며, 특히 0으로 끝나는 것은 아닙니다. 예를 들어, 1.999999998 또는 뭔가 얻을 수 있습니다. Dean의 말처럼 형식 지정자를 사용하십시오. –
@Jesse Rusak 제로만을 없앨 필요가 있습니다 ... – Knodel