@ Николас Гой:
Я не думаю, что sscanf(str, "%f, &float) == 1
(или != 1
) действительно делает то, что нужно.
Если в str
есть дополнительные символы (например, «1.1foo»), он будет анализироваться без ошибок, что, вероятно, нежелательно. Это можно исправить, выполнив:
char dummy;
if (sscanf(str, "%f%c", &float, &dummy) != 1) {
/* Parse error. */
} else {
/* Parsed cleanly. */
}
вместо этого. Тем не менее, sscanf
с %f
, скорее всего, будет использовать strtod
для внутреннего использования и в любом случае использовать его для плавания. Язык в стандарте C гласит:
a, e, f, g Соответствует необязательному знаку с плавающей запятой, бесконечности или NaN, чье
формат такой же, как и ожидалось для предметной последовательности strtod
функция. Соответствующий аргумент должен быть указателем на плавающий.
что подразумевает это, и мне кажется, что это верно для меня (gcc 4.2.1 во FreeBSD). Используя приведенный выше код sscanf
, «1.79e308» успешно анализирует, но имеет значение + inf, как и «5e-300» со значением 0.0, и это те же результаты, которые вы получите от (float) 1.79e308
и (float) 5e-300
.
Во всяком случае. После всего этого я задаю вопрос, почему ОП все равно хочет использовать float вместо double.