22.368511과 같은 이중 값이 있습니다. 소수점 이하 두 자리로 반올림하고 싶습니다. 즉, 22.37을 반환해야합니다.
어떻게 할 수 있습니까?
답변:
대부분의 언어에서와 같이 형식은
%.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
setPositiveFormat:
있기 때문에, setFormat:
방법 (오직 맥에 대해 정의) 존재하지만, 아직하지 않았다 - 위대한 대답 : 당신이 나에게, 그래서 일을 실험 시간과 큰 감사를 저장
아래 코드를 사용하여 소수점 이하 두 자리로 형식을 지정할 수 있습니다.
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)
value = (round(value*100)) / 100.0;
[label setText:@"Value: %.2f", myNumber];
NSDecimalRound 함수를 사용할 수 있습니다.
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
나는 Jason의 대답으로 갈 예정 이었지만 Xcode (4.3.3) 버전에서는 그렇게 할 수 없다는 것을 알았습니다. 그래서 약간의 연구 끝에 최근에 클래스 메서드를 변경하고 모든 이전 메서드를 제거했음을 발견했습니다. 그래서 내가 그것을 어떻게해야했는지 :
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
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;
}
Swift의 경우 Foundation을 가져올 수없고 round ()를 사용하거나 String을 원하지 않는 경우 간단한 솔루션이 있습니다 (일반적으로 Playground에있는 경우).
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
결과 : 31.726
Umberto Raimondi가 게시 한 솔루션을 Double 형식으로 확장 하여 사용합니다 .
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}