У меня двойное значение 22.368511, я хочу округлить его до двух знаков после запятой. т.е. он должен вернуть 22,37
Как я могу это сделать?
iphone
objective-c
cocoa-touch
testndtv
источник
источник
Ответы:
Как и в большинстве языков, формат
%.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]]); }
источник
setPositiveFormat:
, потому чтоsetFormat:
метода не существовало (определено только для Mac), но все же - отличный ответ, сэкономивший мне часы экспериментов, так что +1 и большое вам спасибо :)Вы можете использовать приведенный ниже код, чтобы отформатировать его до двух десятичных знаков.
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
Swift 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];
источник
В Swift 2.0 и Xcode 7.2:
let pi:Double = 3.14159265358979 String(format:"%.2f", pi)
Пример:
источник
Вы можете использовать функцию NSDecimalRound
источник
Чтобы удалить десятичные дроби из двойника, взгляните на этот вывод
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
источник
Я собирался пойти с ответом Джейсона, но заметил, что в моей версии 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
источник
Я использую решение, опубликованное Умберто Раймонди, расширяющее тип Double:
extension Double { func roundTo(places:Int) -> Double { let divisor = pow(10.0, Double(places)) return (self * divisor).rounded() / divisor } }
источник
Вы могли сделать это:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; [f setFormat:@0.00"]; // test NSNumber* a = @12; NSString* s = [f stringFromNumber:a]; NSLog(@"%@", s);
источник