Неправильное преобразование 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;
}

Объяснение кода листинга программы

В данном коде:

  1. Объявлены две переменные: fvar типа float со значением 1.17 и dvar типа double со значением 1.17.
  2. Производится вычисление fvar 100.0 и dvar 100.0, приводящихся к типу int с помощью (int) и выводится на экран с помощью функции printf.
  3. Возвращается 0, что означает успешный конец работы программы. Возможная проблема в коде: При выполнении вычисления fvar 100.0 и dvar 100.0 происходит некорректное округление чисел с плавающей точкой до целых чисел, так как приведение типа float или double к int ведет к округлению значения до ближайшего целого числа. В данном случае, значение 1.17 будет округлено до 1, что может привести к непредсказуемым результатам в дальнейшем использовании программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5