double 값을 소수점 2 자리로 반올림


87

22.368511과 같은 이중 값이 있습니다. 소수점 이하 두 자리로 반올림하고 싶습니다. 즉, 22.37을 반환해야합니다.

어떻게 할 수 있습니까?


1
소수점 이하 2 자리로 해당 값을 반환 하시겠습니까? 또는 소수점 둘째 자리로 값을 표시 하시겠습니까?
thelaws

사실 나는 그것을 표시해야합니다
testndtv

답변:


189

대부분의 언어에서와 같이 형식은

%.2f

여기에서 더 많은 예를 볼 수 있습니다.


편집 : 25.00의 경우 포인트 표시에 대해 우려하는 경우에도 이것을 얻었습니다.

{
    NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
    [fmt setPositiveFormat:@"0.##"];
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34
2010-08-22 15:04:10.616 a.out[6954:903] 25.3
2010-08-22 15:04:10.617 a.out[6954:903] 25

13
iOS에서, 나는 사용했다 setPositiveFormat:있기 때문에, setFormat:방법 (오직 맥에 대해 정의) 존재하지만, 아직하지 않았다 - 위대한 대답 : 당신이 나에게, 그래서 일을 실험 시간과 큰 감사를 저장
FurloSK

1
한 가지 문제는 둥글 지 않지만 잘립니다. 아마도 질문자가 귀하의 코드와 함께 제공 한 입력 값을 사용하면 결과가 예상 한 결과 (22.37)가 아니라 (22.36) 결과가 될 것입니다.
제임스 부시

하지만 당신은 더 계산을 사용할 수 없습니다
Parag Bafna

70

아래 코드를 사용하여 소수점 이하 두 자리로 형식을 지정할 수 있습니다.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];

NSLog(@"Result...%@",numberString);//Result 22.37

스위프트 4 :

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up

let str = String(describing: formatter.string(from: 12.2345)!)

print(str)

2
빠른 4 년 :하자 STR = 문자열 (! 설명 : (에서 formatter.string : 12.2345))
yehyatt

결과의 22.36 값에서 6에서 7로 증가하지 않는 것이 가능합니까?
Shahbaz Akram

@ShahbazAkram 예. roundingMode에는 NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown 등과 같은 다른 많은 옵션도 있습니다.
Abdurrahman Mubeen Ali

30
 value = (round(value*100)) / 100.0;

5
나는 이것이 가장 정답이라고 믿습니다-그는 그것을 반올림하도록 요청했습니다-끝에서 문자열로 변환하지 마십시오 (또는 나중에 이중 변환을 다시 수행하십시오).
Martin Kovachev



11

NSDecimalRound 함수를 사용할 수 있습니다.


당신의 가치를, (나 또한 처음에는 문제라고 생각하는) 반올림 경우 그 유용하지만 코멘트 hmthur WATS는 ...에만 표시를 제어하는 것을 보여
제이슨 로저스

6

double에서 소수를 제거하려면 다음 출력을 살펴보십시오.

Obj C

double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);

출력은 다음과 같습니다.

10.02 
10

Swift 2.1 및 Xcode 7.2.1

let hellodouble:Double = 3.14159265358979
print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
print(String(format:"Your value with no decimals: %.0f", hellodouble))

출력은 다음과 같습니다.

3.14 
3

4

나는 Jason의 대답으로 갈 예정 이었지만 Xcode (4.3.3) 버전에서는 그렇게 할 수 없다는 것을 알았습니다. 그래서 약간의 연구 끝에 최근에 클래스 메서드를 변경하고 모든 이전 메서드를 제거했음을 발견했습니다. 그래서 내가 그것을 어떻게해야했는지 :

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];

[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);

2

NSNumber 사용 * aNumber = [NSNumber numberWithDouble : number]; NSNumber 대신 * aNumber = [NSNumber numberWithFloat : number];

+(NSString *)roundToNearestValue:(double)number
{
    NSNumber *aNumber = [NSNumber numberWithDouble:number];

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setUsesGroupingSeparator:NO];
    [numberFormatter setMaximumFractionDigits:2];
    [numberFormatter setMinimumFractionDigits:0];
    NSString *string = [numberFormatter stringFromNumber:aNumber];        
    return string;
}

2

Swift의 경우 Foundation을 가져올 수없고 round ()를 사용하거나 String을 원하지 않는 경우 간단한 솔루션이 있습니다 (일반적으로 Playground에있는 경우).

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

결과 : 31.726


1

Umberto Raimondi가 게시 한 솔루션을 Double 형식으로 확장 하여 사용합니다 .

extension Double {
    func roundTo(places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

0

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

NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.