Я пытаюсь извлечь целые и десятичные части значения с плавающей запятой, и я, кажется, сталкиваюсь с некоторыми странными проблемами округления, возможно из-за неточного способа хранения чисел с плавающей запятой.
У меня есть такой код для извлечения дробной части:
double number = 2.01;
int frac = int(floor(number * 100)) % 100;
Однако результат здесь вместо 1 получается как 0. Это происходит потому, что исходный дубль фактически сохраняется как:
2.0099999...
Однако при запуске sprintf такое преобразование выглядит корректно:
char num_string[99];
sprintf(num_string,"%f",number);
Как sprintf получает правильный ответ, а вышеописанный метод - нет?