LINUX.ORG.RU

Число с плавающей точкой без E

 


0

1

Как наиболее коротким способом прочитать в С число с плавающей точкой, но без буквы е? Например, -12.34+08 вместо традиционного -12.34e8? Я в общем могу написать свой аналог функции atof, но может есть способ по лучше? Какой-нибудь хитрый спецификатор или подходящая функция?

★★★★

Берёшь например strtof, у неё есть параметр endptr. Читаешь ей строку, получаешь мантиссу, а endptr указывает на начало экспоненты (знак «+»). Читаешь экспоненту как целое, можно с помощью strtol для единообразия.

uuwaan ★★
()

Самый простой способ — заюзать sscanf.

#define _GNU_SOURCE
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

double read_data(const char *data) {
  double mant;
  int exp;
  int ret = sscanf(data, "%lf%d", &mant, &exp);
  if (ret != 2) abort();
  return mant * exp10(exp);
}

int main(void) {
  printf("%e\n", read_data("-12.34+08"));
  printf("%e\n", read_data("-12.34-08"));
}

Правда, этот способ читает не только тот формат, что упомянут. Если нужна жёсткая валидация, пиши функцию для посимвольного разбора.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.