У меня двойное значение как 22.368511 Я хочу округлить его до двух знаков после запятой. то есть он должен вернуть 22.37
Как я могу это сделать?
У меня двойное значение как 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
Вы можете использовать приведенный ниже код для его форматирования до двух знаков после запятой
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 3:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up
let str = formatter.string(from: 12.2345)
print(str)
value = (round(value*100)) / 100.0;
[label setText:@"Value: %.2f", myNumber];
Вы можете использовать функцию NSDecimalRound
В Swift 2.0 и Xcode 7.2:
let pi:Double = 3.14159265358979
String(format:"%.2f", pi)
Пример:
Чтобы удалить десятичные знаки из вашего двойника, посмотрите на этот вывод
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 = [Номер NSNumberWithDouble: 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
Вы можете сделать это:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);