Неправильное преобразование 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, что может привести к непредсказуемым результатам в дальнейшем использовании программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д