эффективная функция для преобразования float / double в строку - PullRequest
0 голосов
/ 13 октября 2009

Прямо сейчас, единственная известная мне функция - _snprintf_s, подобная следующей

double dMyValue = <some value>;
_snprintf_s(pszMyBuffer, sizeof(pszMyBuffer), 12, "%.10f", dMyValue);

Ответы [ 2 ]

1 голос
/ 13 октября 2009

Если вы знаете, что значение ограничено определенным диапазоном, вы можете обойти встроенную функцию. Например:

if (v < 0){
  strcat(s, "-"); s++;
  v = -v;
}
double di = floor(v);
double frac = v - di;
int i = (int)di;
int f = (int)floor(frac * 1e10);
strcat(s, itoa(i)); s += strlen(s);
strcat(s, "."); s++;
strcat(s, itoa(f)); s += strlen(s);

но держу пари, у вас есть рыба побольше, чтобы жарить где-то еще.

1 голос
/ 13 октября 2009

Похоже, вы используете Visual C ++. Есть также _fcvt_s, _ecvt_s и _gcvt_s. Основное отличие от _snprintf_s состоит в том, что они не анализируют строку формата, поэтому они должны быть немного более эффективными. Функции библиотек времени выполнения C, как правило, хорошо настроены, поэтому вы, вероятно, не ошибетесь ни с одной из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...