2012-01-13 2 views
1

이 질문과 비슷한 문제가 있습니다 : How to obtain an unformatted string representation of an NSDecimal or NSDecimalNumber? 정확하게 NSNumber로 표시되는 문자열 형식의 숫자가 필요하지만이 숫자는 다른 문자열의 문자열로 다시 변환됩니다 장소, 나는 그것을 피할 수 없다. 내가 가지고있는 문제는 숫자가 문자열로 다시 변환 될 때 문자열이 어떤 경우 과학 표기법에 있다는 것입니다.NSDecimalNumber 출력을 NSString으로 사용하지 않음

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:@"0.0001"]; 
NSString *s = [dn stringValue]; // s will be @"1E-4" 

이 숫자가 과학 표기법으로 표시되지 않도록하려면 어떻게해야합니까?

내가 언급 한 다른 질문과 동작의 차이를 설명 할 수있는 mac 또는 iPhone 대신 2005 년경 GNUstep (GNUstep Base의 경우 v1.11.1 일 가능성이 있음)에서 일하고 있습니다. base library API과 내 자신의 GNUstep 설치 설명서를 살펴 봤지만 도움이 될만한 것을 찾지 못했습니다.

편집 2/7/12는 :

질문이 약간 변경되었습니다하지만 목표는 여전히 동일합니다. 원래는 문자열 출력 부분을 제어 할 수 있다고 생각하지 않았지만 값을 문자열로 다시 전달할 수 있습니다. 이 시점에서 서식 지정 문자열을 사용하려고 시도하지만 과학 표기법이 나타나지 않도록하고 싶습니다.

[NSString stringWithFormat:@"%1.14g", [val doubleValue]] 

나는 우리가 값의 유효 숫자의 특정 숫자를 좋아하기 때문 %g을 사용하도록 선택했습니다. %f을 사용하면 여분의 0을 다듬을 수 있지만 그 숫자가 항상 깨끗하게 나오지는 않습니다. 예를 들어, 800000000.79는 800000000.7899999600으로 나타납니다.

으로 깨끗하게 포맷 된 수치를 얻을 수있는 방법이 최대 숫자의 번호 앞에 과학적 표기법을 표시없이 유효 숫자 (또는 소수점 이하 자릿수) 의 특정 번호에 있습니까?

나는 C의 조언을 기꺼이 받아 들일 의향이 있습니다.

답변

0

stringValue 메서드 대신 NSNumberFormatter를 사용하여 숫자를 인쇄 해보십시오. 그것에는 훨씬 더 많은 옵션이 있습니다.

당신은 체크 아웃해야

2

(I는 NSNumberFormatter는 그누 스텝 볼 수 있으리라 믿고있어)를 NSNumberFormatter

// Create formatter 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];  
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // adjust this 
NSString *formattedOutput = [formatter stringFromNumber:yourDecimalNumber]; 
+0

우리가 어쩌면 (1.11.1을 사용하고 그누 스텝의 어떤 버전처럼 보인다?), NSNumberFormatter 클래스는 완전히 구현되지 않습니다. "이 클래스는 현재 GNUstep에 구현되어 있지 않습니다! 모든 set 메서드가 작동하지만 stringForObject : 형식을 완전히 무시합니다. 아래 문서는 동작을 설명합니다 ..." –

1

방법은 C 값을 받고 (더블, INT, 긴, 등)에 대한과 그런 다음 C 문자열로 서식을 지정하거나 으로 stringWithFormat:?

0

과학적 지수 표기법 표현을 피하려면 아래 방법을 사용하십시오.

func getStringFrom(double doubleVal: Double) -> String 
{ 
    var stringValue : String = "0.00" 

    let formatter = NSNumberFormatter() 
    formatter.usesSignificantDigits = true; 
    formatter.maximumSignificantDigits = 100 
    formatter.groupingSeparator = ""; 
    formatter.numberStyle = .DecimalStyle 
    stringValue = formatter.stringFromNumber(doubleVal)!; 

    return stringValue 

}

변환 문자열이 두 배로 문자열에 두 번

변환은

func getDoubleFrom(textField textField: UITextField) -> Double 
{ 
    var doubleValue : Double = 0.0 

    if let val = textField.text 
    { 
     let numberFormatter = NSNumberFormatter() 
     numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle 
     let finalNumber = numberFormatter.numberFromString(val) 
     doubleValue = (finalNumber?.doubleValue)!; 
    } 

    return doubleValue 
} 
관련 문제