2013-03-16 2 views
2

В моем коде у меня есть двойной номер 2.555. Я использовал %.2f через NSLog для отображения его 2.55, но выход 2.56. Это округляет число, которое я не хочу! Я знаю, что есть ceil(double) и floor(double), но они мне не помогают.Предотвращение округления двойного номера

double div = a/b; 
NSLog(@"DIV = %.f", div); 
+0

Вы можете оставить свой код здесь? – Aravindhan

+0

Вопрос в том, почему вы не хотите, чтобы число округлялось, но просто усекалось? Для '2.555' вывод' 2.55' недействителен. – Sulthan

ответ

1

Не смотря на ваш код, вы не можете найти ошибку. Нижеприведенный код будет работать в соответствии с вашими потребностями.

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; 
[numberFormatter setMaximumFractionDigits:2]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:2.555]]; 
NSLog(@"%@",numberAsString); 
[numberFormatter release]; 

вы можете refere этой ссылки NSNumberFormatter

+0

oh спасибо, что сделал работа. нельзя ли это сделать проще? или я должен всегда помнить NSNumberFormatter? – HusseinB

+0

Проблема заключается в том, как спецификаторы формата печати работают на C. Это разумное решение Objective-C. – uchuugaka

+0

Это не может быть сделано более простым способом, чем это (по моим сведениям). Для этого вам нужно использовать NSNumberFormatter. – Aravindhan

0

Я думаю, что есть более простой способ сделать это. Если я правильно вас понимаю, вы не хотите использовать floor(), потому что вы хотите сохранить содержимое «div» неизменным. Если это правильно, вы можете сделать следующее.

NSLog (@ "DIV =% .2f", trunc (div * 100)/100);
NSLog (@ "DIV =% .2f", пол (div * 100)/100);

Вышеупомянутое будет снимать десятичные знаки после второго, но только для отображения. содержимое «div» не изменяется.

+0

Это не сработает. Числа с плавающей запятой не работают так легко. – Sulthan

+0

Это работает большую часть времени, особенно когда математика не толкает ваш номер за пределы мантиссы. Однако я согласен с тем, что вы можете только нажать число с плавающей запятой до того, как начнут проявляться трещины. – hvanbrug

Смежные вопросы