цели C поплавки и деления

Привет У меня есть большие сомнения в использовании поплавков для делений, здесь тестовый код:

- (void)chuza
{

    float option1 = 0;
    float option2 = 0;


    option1 = 100/50;
    option2 = 50/100;

    NSLog(@"option1 :: %f",option1);
    NSLog(@"option2 :: %f",option2);

}

Итак, я получаю:

2012-10-19 16:21:45.405 Project[2023:14f03] option1 :: 2.000000
2012-10-19 16:21:45.405 Project[2023:14f03] option2 :: 0.000000

так что мой вопрос: почему плавать, как когда

знаменатель> числитель

но не любит

числитель> знаменатель ??

Спасибо!

Ответы на вопрос(3)

100 50 это поплавки, оцелые числа. Это означает, что вывыполняет целочисленное делее и присваивает результат переменной с плавающей запятой. Поскольку целочисленное делее усекает (отбрасывает дробные результаты),50/100 доходность0, 100 делится на 50, поэтому вы получаете2.000000 результат. Попробуйте свою программу с75 а также100, и ты'там посмотримбольше на работе, чем просто в каком направлеи идет делее.

s рассматривая ваши числа как целые числа, выполняя деление и затем помещая результат в число с плавающей точкой.

Попробуйте этот вариант2 = 50.0f / 100;

Решение Вопроса

целочисленное деление для меня, так как вы делите два целых числа. При делении двух целых чисел (в большинстве, если не во всех языках программирования) игнорируется остаток от деления.

Подумайте, как оценивается эта линия. Сначала вычисляется целочисленное деление, а затем целочисленный результат преобразуется в число с плавающей точкой для сохранения в переменной с плавающей точкой.

Обратите внимание, что целые числа нене хранить никаких десятичных дробей, поэтому даже 0,999 в качестве целого числа будет равно 0. Это 'Нет проблем с округлением.

Это'Также не о знаменателе больше, чем числитель. Попробуйте разделить 100/30, и результат будет 3, а не 3.33333 .. как это было бы для деления поплавка.

Вы можете решить эту проблему, приведя числа к числам с плавающей точкой или убедившись, что они являются числами с плавающей точкой.

Кастинг
option2 = ((float)50/(float)100);
Разделительные поплавки
option2 = 50.0f/100.0f;

Ваш ответ на вопрос