Округление чисел в Objective-C
Я пытаюсь сделать некоторое округление числа и преобразование в строку для улучшения вывода в программе Objective-C.
У меня есть значение float, которое я хотел бы округлить до ближайшего .5 и затем использовать его, чтобы установить текст на этикетке.
например:
1.4 будет строка: 1.5
1.2 будет строка: 1
0.2 будет строка: 0
Я потратил некоторое время на Google для ответа, но, будучи noob с Objective-C, я не уверен, что искать! Итак, я был бы очень признателен за указатель в правильном направлении!
спасибо,
Эш
11 ответов:
Спасибо за указатели всем, мне удалось придумать решение:
float roundedValue = round(2.0f * number) / 2.0f; NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:1]; [formatter setRoundingMode: NSNumberFormatterRoundDown]; NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]]; [formatter release];вышеуказанных работ для тестов я бросил на него, но если кто-то знает лучший способ, чтобы сделать это мне было бы интересно услышать это!
float floatVal = 1.23456;округления
int roundedVal = lroundf(floatVal); NSLog(@"%d",roundedVal);Округления
int roundedUpVal = ceil(floatVal); NSLog(@"%d",roundedUpVal);Округления
int roundedDownVal = floor(floatVal); NSLog(@"%d",roundedDownVal);
используйте lroundf (), чтобы округлить поплавок до целого числа, а затем преобразовать целое число в строку.
Я бы рекомендовал изучить использование NSNumberFormatter.
простой способ:
float theFloat = 1.23456; int rounded = roundf(theFloat); NSLog(@"%d",rounded); int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp); int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown); // Note: int can be replaced by float
следующая техника работала для меня в финансовом приложении.
NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated]; monthlyPaymentCalculated=[dd doubleValue]; self.monthlyPaymentCritical=monthlyPaymentCalculated;то, что сделано, сначала округляется с %0.2 f и хранится в NSString, а затем я просто преобразовал его снова в double, и результат был хорош для моего расчета.
С помощью этих функций вы можете округлить до любого значения.. Если вы используете p=2, Вы получаете четные числа.
float RoundTo(float x, float p) { float y = 1/p; return int((x+(1/(y+y)))*y)/y; } float RoundUp(float x, float p) { float y = 1/p; return int((x+(1/y))*y)/y; } float RoundDown(float x, float p) { float y = 1/p; return int(x*y)/y; }
мне нужно было округлить до определенной цифры (не обязательно до целых чисел). Я сделал
NSNumberкатегория (на основе выкл ответ Эша) и добавил к нему следующий метод:- (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode toPositionRightOfDecimal:(NSUInteger)position { NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:position]; [formatter setRoundingMode:roundingMode]; NSString *numberString = [formatter stringFromNumber:self]; return numberString; }что позволяет мне использовать его вот так:
[aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2];Я могу использовать его для округления до целых чисел, передав
0в качестве второго параметра:[aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];
Comments