C ++ atof () - Стандартная библиотека C ++

Функция atof () в C ++ интерпретирует содержимое строки как число с плавающей запятой и возвращает его значение как двойное.

atof () прототип

 двойной atof (const char * str);

Это определено в заголовочном файле.

atof () Параметры

  • str - строка, имеющая представление числа с плавающей запятой.

atof () Возвращаемое значение

Функция atof () возвращает:

  • двойное значение (которое преобразуется из строки).
  • 0.0, если не удалось выполнить действительное преобразование.

Если преобразованное значение выходит за пределы диапазона, это вызывает неопределенное поведение.

Пример 1: Как работает функция atof ()?

 #include #include using namespace std; int main() ( char numberString() = "-32.40"; double numberInDouble; cout << "Number in String = " << numberString << endl; numberInDouble = atof(numberString); cout << "Number in Double = " << numberInDouble; return 0; ) 

Когда вы запустите программу, вывод будет:

 Число в строке = -32,40 Число в двойном формате = -32,4 

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

  • Для десятичных значений с плавающей запятой:
    • Группа десятичных цифр (0–9) , необязательно содержащая десятичную точку (.). Например: 9,056, -0,013 и т. Д.
    • Необязательная часть экспоненты ( eили E), за которой следует необязательный знак + или - и непустая последовательность десятичных цифр. Например: 1.23455e + 009, 5.23e-018 и т. Д.
  • Для шестнадцатеричного значения с плавающей запятой:
    • Строка, начинающаяся с 0xили 0X, за которой следует непустая последовательность шестнадцатеричных цифр, необязательно содержащая десятичную точку (.). Например: 0xf1b, -0xb1b.51 и т. Д.
    • Необязательная часть экспоненты ( pили P), за которой следует необязательный знак + или - и непустая последовательность шестнадцатеричных цифр. Например: 0x51c.23p5, -0x2a.3p-3 и т. Д.
  • Бесконечность:
    • INFили INFINITY(без учета регистра). Например: -iNf, INfINiTy и т. Д.
  • NaN (не число):
    • NANили NANsequence(без учета регистра), где последовательность - это последовательность символов, состоящая только из буквенно-цифровых символов или символа подчеркивания (_). Результатом является тихое NaN. Например: Nan, NaN12 и т. Д.

Пример 2: Как atof () работает с экспонентами и шестнадцатеричными числами?

 #include #include using namespace std; int main() ( cout << "-44.01e-3" << " to Double = " << atof("-44.01e-0") << endl; cout << "-44.01e-3" << " to Double = " << atof("-44.01e-3") << endl; cout << "0xf1bc" << " to Double = " << atof("0xf1bc") << endl; cout << "0xf1bc.51" << " to Double = " << atof("0xf1bc.51") << endl; return 0; ) 

Когда вы запустите программу, вывод будет:

 -44.01e-3 в Double = -44.01 -44.01e-3 в Double = -0.04401 0xf1bc в Double = 61884 0xf1bc.51 в Double = 61884,3 

Пример 3: atof Случаи для Бесконечности и NaN

 #include #include using namespace std; int main() ( cout << "INFINITY" << " to Double = " << atof("INFINITY") << endl; cout << "Inf" << " to Double = " << atof("Inf") << endl; cout << "Nan" << " to Double = " << atof("Nan") << endl; cout << "NAN" << " to Double = " << atof("NAN") << endl; return 0; ) 

Когда вы запустите программу, вывод будет:

 INFINITY в Double = inf от Inf в Double = inf от Nan до Double = nan от NAN до Double = nan

В общем, допустимый аргумент с плавающей запятой для функции atof () имеет следующую форму:

 (пробел) (- | +) (цифры) (. цифры) ((e | E) (- | +) цифры)

Функция atof () игнорирует все начальные пробельные символы до тех пор, пока не будет найден основной непробельный символ.

Затем, начиная с этого символа, требуется как можно больше символов, которые формируют допустимое представление с плавающей запятой и преобразуют их в значение с плавающей запятой. Все, что осталось от строки после последнего допустимого символа, игнорируется и не влияет на результат.

Пример 4: функция atof () с пробелами и завершающими символами

 #include #include using namespace std; int main() ( cout << "25.5" << " to Double = " << atof(" 25.5") << endl; cout << "25.5 " << " to Double = " << atof(" 25.5 ") << endl; cout << "25.5abcd" << " to Double = " << atof("25.5abcd") << endl; // Returns 0 because of invalid conversion cout << "abcd25.5" << " to Double = " << atof("abcd25.5") << endl; // Rules for whitespace and trailing character also apply for infinity and Nan cout << "INFINITYabcd" << " to Double = " << atof("INFINITYabcd") << endl; cout << "INFINITY" << " to Double = " << atof(" INFINITY") << endl; cout << "Nanlll" << " to Double = " << atof("Nanlll") << endl; return 0; )

Когда вы запустите программу, вывод будет:

 От 25,5 до Double = 25,5 от 25,5 до Double = 25,5 от 25,5abcd до Double = 25,5 abcd25,5 до Double = 0 INFINITYabcd до Double = inf INFINITY до Double = inf Nanlll до Double = nan

Интересные статьи...