2016-09-12 2 views
-2

В C++ существует функция std :: setprecision, которая может устанавливать float/double precision. Как я могу установить точность в Objective-C? и этот текст напечатан ниже:Как установить точность в Objective-C

(lldb) p 10/200 
(int) $0 = 0 
(lldb) p (float)10/200 
(float) $1 = 0.0500000007 

результат 3 результат: 0.0500000007, почему именно «7» в результате? как я могу получить результат 0.05?

+0

Чек мой ответ. –

+1

Вы путаете отладчик с языком программирования. И прежде чем вы будете слишком разочарованы, проверьте, что на самом деле делает std :: setprecision. И поскольку вы смотрите на отладчик, вы определенно не хотите менять то, что видите, потому что это может только скрыть ошибки. – gnasher729

+0

[Что каждый программист должен знать о арифметике с плавающей точкой] (http://floating-point-gui.de/) – Sulthan

ответ

-1

плз использовать

 double A = 0.0500000007; 
     NSString *b =[NSString stringWithFormat:@"$%.02f",A] ; 
    double B = [b doubleValue]; 
+0

Просьба не делать этого. Если вы помещаете числа в метки, используйте форматтер, который поддерживает локализацию. – Sulthan

+0

@ Султан нуждается в результате в 0,05. что неправильно в этом. –

+0

Для многих людей результатом должен быть '0,05' или какой-либо другой соответствующий формат. Используйте 'NSNumberFormatter' для форматирования чисел, соответствующих локали пользователя. – rmaddy

0

Вы можете использовать NSNumberFormatter для форматирования объектов в самых разнообразных формах --- слишком много, чтобы перечислить здесь, смотрите документацию, доступную из Xcode. Также см. Руководство по форматированию данных.

2

Номера с плавающей запятой двоичные номера с плавающей запятой. 0.05 не может быть точно представлена ​​двоичным числом с плавающей запятой. Результат не может быть точно 0,05.

Кроме того, вы совершенно бессмысленно используете float вместо double. float имеет точность только шесть или семь цифр. Если у вас есть очень веская причина, которую вы можете объяснить, используйте double, который дает вам около 15 цифр точности. Вы все равно не сможете получить 0,05 точно, но ошибка будет намного меньше.

0

Вы должны внести изменения между оператором %modulo и его identifierf, чтобы получить желаемый результат.

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat]; 

% .02f говорит форматировщик, что вы будете форматирование поплавка (% F) и, которые должны быть округлены до двух мест, и должны быть дополнены 0s.

Пример:

%f = 25.000000 // results 25.000000 
%.f = 25 // results 25 
%.02f = 25.00 // results 25.00 
+0

Не используйте 'stringWithFormat'. Используйте 'NSNumberFormatter', поэтому номер правильно формируется в локали пользователя. – rmaddy

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