Я пытаюсь преобразовать число с плавающей запятой в строку. Я знаю, что вы можете сделать это с помощью Ostringstream & sprintf и т. д., но в проекте, в котором я работаю, я пытаюсь сделать это, используя свои собственные функции только (Я создаю свой собственный класс строки без использования каких-либо внешних функций). Я не хочу идеального представления, например Я не против, если это произойдет с большим или маленьким числом: 1.0420753e + 4, как это происходит со стандартным потоком строк.
Я знаю, как работают числа с плавающей запятой (например, знак, экспонента, мантисса) и как они представлены иначе, чем то, как они отображаются (именно поэтому это сложно). Я знаю, что это возможно, потому что библиотека std c ++ может это сделать — я просто не знаю, как это сделать себя.
РЕДАКТИРОВАТЬ: я создал свою собственную целочисленную версию этого (конвертирует int в мой собственный класс CString).
Во-первых, не делайте этого сами. iOS имеет стандартные функции C ++ для форматирования объектов с плавающей точкой, и я ожидаю, что Android тоже.
Во-вторых, не делайте этого сами. Сложно обойтись без ошибок округления. Методы для этого уже известны и опубликованы, и вы должны использовать хорошие ссылки, а не алгоритмы, которые вы обычно найдете в переполнении стека. Классическая бумага для этого Правильно округленные двоично-десятичные и десятично-двоичные преобразования Дэвид М. Гэй, и вот код от Дэвида Гея.
Простой метод: делите на 10, пока значение не станет ≤ 1. Это даст вам количество десятичных знаков, после которого вы должны напечатать .
, Умножьте исходное число на 10 для каждой цифры, которую вы хотите после .
и круглая. Укажите полученное целое число и вставьте .
,
Используйте ostringstream -:
double d = 2.7818;
std::ostringstream ss;
ss << d;
std::cout << ss.str() << std::endl;
Хм, если вы действительно хотите заново изобрести свое собственное квадратное колесо, то, вероятно, самый простой способ — написать конвертер из float в int (вы сказали, что знаете, как работает битовый шаблон), или, может быть, даже 2-х целых — один для дробной части, другой для остальное, затем распечатайте их REUSING код, который уже существует