Округліть подвійне значення до 2 знаків після коми


87

У мене подвійне значення 22,368511, я хочу округлити його до 2 знаків після коми. тобто він повинен повернути 22.37

Як я можу це зробити?


1
Ви хочете повернути це значення з 2 знаками після коми? або відобразити значення з 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).
— Джеймс Буш,

Але ви не можете використовувати його для подальшого розрахунку
— Параг Бафна

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: let str = String (опис: formatter.string (з: 12.2345)!)
— yehyatt

Чи можливо, щоб не збільшити 6 до 7 у 22,36 значення результату?
— Шахбаз Акрам

@ShahbazAkram Так. Режим округлення також має багато інших варіантів, наприклад, NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown тощо
— Абдуррахман Мубіен Алі

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

5
Я вважаю, що це найбільш правильна відповідь - він попросив просто округлити її, а не перетворювати в рядок в кінці (або робити подвійне перетворення назад у подвійне потім).
— Мартін Ковачев



11

Ви можете використовувати NSDecimalRound функцію


це корисно, якщо ваше округлення значення (про що я спочатку також думав, що питання), але коментарі показують, що hmthur Wats контролює лише дисплей ...
— Джейсон Роджерс

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: число];

+(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.