PIC C18: преобразование двойной строки
Я использую PIC18F2550. Программирование на языке C18.
Мне нужна функция, которая преобразует double в строку, как показано ниже:
void dtoa( char *szString, // Output string
double dbDouble, // Input number
unsigned char ucFPlaces) // Number of digits in the resulting fractional part
{
// ??????????????
}
Чтобы называться так в основной программе:
void main (void)
{
// ...
double dbNumber = 123.45678;
char szText[9];
dtoa(szText, dbNumber, 3); // szText becomes "123.456" or rounded to "123.457"
// ...
}
3 ответа
Так что пиши один!
5 минут, немного миллиметровки и кофе - все, что нужно.
На самом деле это хороший вопрос для интервью
Tiny printf может работать для вас: http://www.sparetimelabs.com/tinyprintf/index.html
Как правило, библиотека Newlib C (лицензия BSD от RedHat, входящая в состав Cygwin, а также используемая во многих компиляторах встроенных систем "с нуля") является хорошим местом для начала полезных источников для вещей, которые будут в стандарте. С библиотека.
Newlib dtoa.c
источники находятся в src/newlib/libc/stdlib
подкаталог исходного дерева:
- Браузер исходного кода в Интернете: http://sourceware.org/cgi-bin/cvsweb.cgi/src/newlib/libc/stdlib/?cvsroot=src
- Прямая ссылка на текущую версию
dtoa.c
файл: http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/src/newlib/libc/stdlib/dtoa.c?rev=1.5&content-type=text/plain&cvsroot=src
Файл будет немного странным в том смысле, что Newlib использует несколько нечетных макросов для объявлений функций, но должен быть простым в адаптации - и, имея BSD-лицензию, вы можете делать с ним все, что захотите, если сохраните уведомление об авторских правах на него.