Целочисленное и целочисленное деление на выходе - PullRequest
0 голосов
/ 28 октября 2018

Может кто-нибудь объяснить вывод следующего кода: http://cpp.sh/9dy44

Почему в последней строке всегда 0,17?

float a = 17, b = 100;

printf("%f\n", 17/100);
printf("%f\n", a/b);
printf("%f\n", 17/b);
printf("%f\n", 17.0f/b);
printf("%f\n", a/100);
printf("%f\n", a/100.0f);
printf("%f\n", 5/100);

output

0.000000
0.170000
0.170000
0.170000
0.170000
0.170000
0.170000

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

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

Попробуйте это

// Example program
#include <stdio.h>

int main()
{
    float a = 17, b = 100;

    printf("%f\n", 17.0/100);
    printf("%f\n", a/b);
    printf("%f\n", 17/b);
    printf("%f\n", 17.0f/b);
    printf("%f\n", a/100);
    printf("%f\n", a/100.0f);
    printf("%f\n", 5.00/100);

    return 0;
}
0 голосов
/ 28 октября 2018

Это называется Undefined Behaviour, не пытайтесь понять, почему это происходит, потому что, как следует из названия, это undefined!Неопределенное поведение происходит, потому что вы пытаетесь напечатать двойное число, но вы передаете два целых числа.Обратите внимание, что вы также получаете предупреждение:

14: 25: warning: format '% f' ожидает аргумент типа 'double', но аргумент 2 имеет тип 'int' [-Wformat =]

Измените последнюю строку на эту:

    printf("%f\n", 5.0/100);

И все будет работать, как и ожидалось.

...