Округлить двойное значение до 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:метода не существовало (определено только для Mac), но все же - отличный ответ, сэкономивший мне часы экспериментов, так что +1 и большое вам спасибо :)
FurloSK

1
Одна проблема: он не округляется, а обрезается. Предположительно, используя входное значение, предоставленное вопрошающим вместе с вашим кодом, результат будет не таким, как он ожидал (22.37) - скорее (22.36).
Джеймс Буш

Но вы не можете использовать его для дальнейших расчетов
Параг Бафна 03

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

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)

2
В Swift 4: let str = String (описывает: formatter.string (from: 12.2345)!)
yehyatt 08

Возможно ли, чтобы значение результата не увеличивалось с 6 до 7 в 22,36?
Шахбаз Акрам

@ShahbazAkram Да. RoundingMode также имеет множество других опций, например, NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown и т. Д.
Абдуррахман Мубин Али 08

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

5
Я считаю, что это наиболее правильный ответ - он попросил просто округлить его, а не преобразовывать в строку в конце (или потом делать двойное преобразование обратно в двойное).
Мартин Ковачев




6

Чтобы удалить десятичные дроби из двойника, взгляните на этот вывод

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

Я собирался пойти с ответом Джейсона, но заметил, что в моей версии 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



0

Вы могли сделать это:

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

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.