Неправильное преобразование float к int - C (СИ)
Формулировка задачи:
Здравствуйте!
Я ввожу число 1.17, умножаю его на 100.0 и присваиваю это переменной типа int.
Но туда записывается не 117, а 116!
Подскажите, пожалуйста, где у меня ошибка?
#include <stdio.h>
#define MAXVALUE 2147836.47
float vvodd(float min,float max);
int main()
{
int i;
float sum;
sum=vvodd(0.0,MAXVALUE);
printf("%.2f\n",sum);
i=sum;
printf("%d\n",i);
sum*=100.0;
printf("%.2f\n",sum);
i=sum;
printf("%d\n",i);
return 0;
}
float vvodd(float min,float max)
{
float v;
fflush(stdin);
while(scanf("%f", &v)!=1||v<min||v>max)
{
fflush(stdin);
if (v<min||v>max)
printf("Допустимый диапазон значений от %.3f до %.3f\nПовторите ввод\n",min,max);
else
printf("Некорректно введено число\nПовторите ввод\n");
}
return v;
}Решение задачи: «Неправильное преобразование float к int»
textual
Листинг программы
#include <stdio.h>
int main(void) {
float fvar = 1.17;
double dvar = 1.17;
printf("%d\n%d\n", (int)(fvar * 100.0), (int)(dvar * 100.0));
return 0;
}
Объяснение кода листинга программы
В данном коде:
- Объявлены две переменные: fvar типа float со значением 1.17 и dvar типа double со значением 1.17.
- Производится вычисление fvar 100.0 и dvar 100.0, приводящихся к типу int с помощью (int) и выводится на экран с помощью функции printf.
- Возвращается 0, что означает успешный конец работы программы. Возможная проблема в коде: При выполнении вычисления fvar 100.0 и dvar 100.0 происходит некорректное округление чисел с плавающей точкой до целых чисел, так как приведение типа float или double к int ведет к округлению значения до ближайшего целого числа. В данном случае, значение 1.17 будет округлено до 1, что может привести к непредсказуемым результатам в дальнейшем использовании программы.