powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / подскажите функцию определяющую double это или нет
18 сообщений из 18, страница 1 из 1
подскажите функцию определяющую double это или нет
    #33483504
karl2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужна такая функция которая после ввода символов ( через scanf) проверяет число с плавающей запятой ли это или нет

заранее благодарю
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33483555
homichus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karl2003мне нужна такая функция которая после ввода символов ( через scanf) проверяет число с плавающей запятой ли это или нет

заранее благодарю

StrToFloat + try + catch
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33483694
karl2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
homichus karl2003мне нужна такая функция которая после ввода символов ( через scanf) проверяет число с плавающей запятой ли это или нет

заранее благодарю

StrToFloat + try + catch

я так понял что это для С++, а мне надо для Си.
и желательно примерчик.
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33483714
suzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F1: strtod , там и примерчик есть.
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33484052
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лексический анализ выполняется конечными автоматами.
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33485147
Гадёныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функция Преобразует строку в число с плавающей точкой.

Синтаксис #include <math.h>
double atof(const char * s);

Файл, содержащий math.h, stdlib.h
прототип

Описание Функция atof преобразует символьную строку,
адресный указатель которой находится в аргументе s,
в число с двойной точностью (тип double); данная
функция распознает символьное представление числа с
плавающей точкой следующего вида:

- необязательная строка табуляции и пробелов;
- необязательный знак;
- строку цифр и необязательную десятичную точку
(цифры могут находиться с обеих сторон от точки);
- необязательные символы e или E, за которыми
следует необязательное целое со знаком.

Символы должны соответствовать следующему формату:

[пробелы] [знак] [ddd] [.] [ddd] [e|E[знак]ddd]

atof также распознает +INF и -INF для плюс и минус
бесконечности, +NAN и -NAN для нечисловых значений.

Эта функция прекращает преобразование на первом
нераспознаваемом символе.

strtod аналогична atof; она дает лучшее
распознавание ошибок, и поэтому в некоторых случаях
предпочтительнее.

Возвращаемое atof возвращает преобразованное значение указанной
значение символьной строки.

В случае переполнения atof возвращает положительное
или отрицательное значение HUGE_VAL, глобальная
переменная errno устанавливается в ERANGE и функция
matherr не вызывается.

Переносимость Поддерживается в системах UNIX и определена в ANSI
C.

Смотрите также atoi, atol, ecvt, fcvt, gcvt, scanf, strtod.

Пример:

#include<stdlib.h>
#include<stdio.h>

int main(void)
{
float f;
char *str = "12345.678";
f = atof(str);
printf("строка = %s значение = %5.3f\n",str,f);
return 0;
}
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33485153
Гадёныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функция Преобразует число с плавающей точкой в строку
символов.

Синтаксис #include<stdlib.h>
char * fcvt(double value, int ndig, int * dec,
int * sign);

Файл, содержащий stdlib.h
прототип

Описание Функция fcvt преобразует значение value в строку с
нулевым окончанием из ndig цифр, начиная с самой
левой значащей цифры, и возвращает адресный
указатель строки. Позиция десятичной точки
относительно начала строки косвенным образом
хранится в параметре dec (отрицательное значение
decpt означает левый отсчет полученных цифр). В
самой строке десятичной точки нет. Если знак
результата отрицательный, слово, на которое
указывает адресный указатель sign, имеет ненулевое
значение, иначе оно равно 0.

Число округляется к числу разрядов, задаваемому
параметром ndig.

Возвращаемое Функция fcvt возвращает адресный указатель
значение статическую строку, чье содержимое перезаписывается
при каждом вызове функций.

Переносимость Функция поддерживается на системах UNIX. Она не
определена в стандарте ANSI C, и поэтому мы не
рекомендуем использовать ее при написании
переносимых программ.

Смотрите также ecvt, gcvt, sprintf.

Пример:

#include<stdlib.h>
#include<stdio.h>

int main(void)
{
char *str;
double num;
int dec, sign;
int ndig = 5;

num = 9.876;
str = fcvt(num,ndig,&dec,&sign);
printf("Строка = %s dec = %d sign = %d\n",string,dec,sign);
/* отрицательное число */
num = -123.45;
str = fcvt(num,ndig,&dec,&sign);
printf("Строка = %s dec = %d sign = %d\n",string,dec,sign);
num = 0.678e5;
str = fcvt(num,ndig,&dec,&sign);
printf("Строка = %s dec = %d sign = %d\n",string,dec,sign);
return 0;
}
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33485165
Гадёныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сначала преобразуй в строку, потом опять в число с плавающей точкой...

возвращаемое значение мотри выше,
хоть и геморно, но работать буд...
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33485773
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karl2003мне нужна такая функция которая после ввода символов ( через scanf) проверяет число с плавающей запятой ли это или нет

заранее благодарю

а может сканф не надо ?

Код: plaintext
1.
char input[] = "3.14";
bool IsFloat = (int)atof( input ) != atoi( inpunt);
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #33487478
Гадёныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно и через сканф

char str[20];
scanf("%s",str);
int IsFloat = (int)atof( input ) != atoi( inpunt);
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
подскажите функцию определяющую double это или нет
    #39994020
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эммм,
что у меня с gcvt не так?




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
g++ (GCC) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



m.cpp: In function 'int main()':
m.cpp:17:4: error: 'gcvt' was not declared in this scope
   17 |    gcvt( source, 8, buffer);
      |    ^~~~




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <math.h>

#include <string.h>

int main() {
   int x = atoi("111111111111");  // number is to big, it's error
   printf(  "error: %d: %s", errno,   strerror(errno) );

   char buffer[100];
   double source = 3.1415926535;
   itoa( 123,  buffer, 10);
   printf( "\nitoa (%d) -> '%s'",   123, buffer);

   gcvt( source, 8, buffer); 
   printf( "\ngcvt ( %f) ->  '%s'",  source, buffer);
}
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #39994106
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gcvt не является стандартной функцией.
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #39994113
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подняли засохший и пыльный топик. Ну ладно.

Все рецепты, основанные на возвращении double - не совсем полноценные. Что нам предлагают?
Вместо статуса ошибки. 0.0 ? HUGE_VAL ? Inf? Nan? Это все тоже конкретные состояния
переменной double.

Тут надо возвращать либо объект-обертку который содержит признак того распарсили мы число
или нет или вернуть пару примитивов. Собственно double и статус ошибки (<double,bool>). На новых плюсах
должно быть как-то так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
std::tuple<double, bool> str_tod_optional(const std::string& s) 
{
  // parse string 's' for Double format
  // .................
  if (parseOk) {
     return std::make_tuple(strtod(s), true); 
  }
  return std::make_tuple(NaN, false);   
}
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #39994168
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuriyRusinov
gcvt не является стандартной функцией.

какую брать?
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #39994177
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz
YuriyRusinov
gcvt не является стандартной функцией.

какую брать?

sscanf()
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #39994179
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например atof, strtod

И еще грамотно заданный вопрос содержит в себе половину ответа, поэтому надо не поднимать топик 10+ летней давности, а создать новую тему в которой описать проблему и задать вопрос.
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #39994233
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда уж sprintf
...
Рейтинг: 0 / 0
подскажите функцию определяющую double это или нет
    #39994666
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чё вы все как сишники

std::stod же
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / подскажите функцию определяющую double это или нет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]