Я пытаюсь извлечь целые и десятичные части значения с плавающей запятой, и я, кажется, сталкиваюсь с некоторыми странными проблемами округления, из-за, вероятно, из-за неточного способа поплавки.Как функции отображения, такие как sprintf, преобразуют числа в строки?
У меня есть некоторый код, как это извлечь дробную часть:
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);
Как srintf получает правильный ответ, а метод выше?
Спасибо, что указал на мои ошибки, я действительно должен избегать таких вопросов поздно вечером. –
Вы смогли это исправить? – dirkgently