2010-06-17 2 views
0

Хорошо, из того, что я понимаю, целое число, которое является долей, будет округлено так или иначе, так что если формула вырастет с 5/6, она автоматически округляет ее до 1. У меня есть расчет:iphone float vs целое округление?

xyz = ((1300 - [abc intValue])/6) + 100; 

xyz определяется как NSInteger, abc - это NSString, который выбирается через UIPicker. Я хочу, чтобы вычисление (1300 - [abc intValue]) добавляло от 1 до 100 для каждых 6 единиц ниже 1300. Например, 1255 должно привести к xyz, имеющему значение 100 и 1254, должно привести к значению 101.

Теперь я понимаю, что моя формула выше неверна из-за принципов округления, но я получаю некоторые результаты CRAZY от самой программы. Когда я ударил в 1259 году, мне было 106. Когда я ударил в 1255 году, мне было 107. Почему это должно быть так?

ответ

4

Ваше понимание неверно. Целочисленное деление обрезает:

5/6 == 0 

(1300 - 1259)/6 == 41/6 == 6 

(1300 - 1255)/6 == 45/6 = 7 

Вы можете использовать:

xyz = ((1300.0 - [abc intValue])/6) + 100; 

и сделать хуг в NSDouble. Это обеспечит деление с плавающей запятой.

+0

Возможно, вы имели в виду NSNumber, а не NSDouble (который не является допустимым типом, если я правильно помню) – nicktmro

0

Вы также можете ввести в заблуждение цифры и время. 1255 - это 45 ниже 1300, а не 5 ниже :-)

+0

LOL - возможно, я должен дать математическую книгу второго класса попробовать :) Благодарю. – startuprob

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