Я нашел очень хороший ответ на этот вопрос в этой теме
Я хочу немного подробнее понять, почему printf () не может напечатать число с плавающей запятой в виде десятичной дроби (с% d).
Программа простая, конвертирующая градусы Фаренгейта в градусы Цельсия.
Я понимаю, что %.f или %. 0f делает то, что я хочу. Но когда я пытаюсь сделать то же самое с % d , , результат непредсказуем .
Я искал более подробную информацию cplusplus , но я не вижу, где это переполняется или почему я получаю этот результат. Например, если вы используете неинициализированную переменную, вы получите какое-то случайное (или не очень) случайное значение, которое находится в том месте памяти, куда имя вашей переменной «указывает». Вот в чем причина?
float fahr, celsius;
int lower, upper, step;
lower = 0; upper = 300; step = 20;
fahr = lower;
while(fahr <= upper){
celsius = (5 / 9.) * (fahr - 32);
printf("%d\t%d\n",fahr,celsius);
fahr+=step;
}
Я ожидал: 0 20 40 60 .... 300 (первый столбец) -17, -6, -4, ... (второй столбец)
вместо этого я получил 0 0 0 0 0 0 0 ,,, 0 (первый столбец) 0, 1077149696, 1078198272, ... (второй столбец)