Округліть подвійне значення до 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.