Тимур-Carleone
Тимур-Carleone

Помогите с лёгкой задачкой по С++



Недавно начал самостоятельно учиться программировать на С++. Столкнулся с таким вопросом: (см. скриншот) При вводе значения переменной MinSek 2.60, программа возвращает значение 2.599999. По какой причине и как исправить? Пи вводе значения 1.60 всё работает.



Решил, вставив в программу такие строчки:

double x;
a=MinSek*100;
x=ceil(a);
b=x;
Min = MinSek;
Sek = (b - (Min*100));

То есть домножил 2.5999 на 100, округлил до целого, получилось 260. Потом перевел это число в integer. Для данной задачи подходит.

))))
))))

#include
#include
#include
int main() {
float time;
unsigned min, sec, total;
setlocale(LC_CTYPE, "Russian_Russia.1251");
printf("Введите время в формате mm.ss -> ");
scanf_s("%f", &time);
if ((sec = (unsigned)((time - (unsigned)time + 0.001f) * 100)) >= 60) {
printf("\a\tОшибка! Предельно допустимое значение для секунд 59");
} else {
min = 60 * (unsigned)time;
total = min + sec;
printf("Время в секундах: %u", total);
}
_getch();
return 0;
}

ГМ
Галина Мухамметова

это не исправить - это не ошибка. это свойство представления нецелых чисел в двоичной системе счисления.

АН
Александр Носов

используй округление

ВТ
Вячеслав Тур

Число, записывающееся в десятичной системе как 2,60, в двоичной системе невозможно представить с конечной длиной записи. Для чтения в привычном виде исправляется округлением.

Похожие вопросы
помогите с задачкой по C++
Задачка по программированию. Помогите...
Помогите с задачкой по С++.
Помогите с задачкой одной в С++
помогите с задачкой в excele
Плизз помогите составить уравнение к лёгкой задачке зарание спасибо. вн
Помогите с задачками
Помогите с задачкой по с++..
помогите с задачкой на С++
Помогите с задачкой по С++