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: з випадків нескінченності та 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 вдвічі = 25,5 25,5 вдвічі = 25,5 25,5abcd вдвічі = 25,5 abcd25,5 вдвічі = 0 INFINITYabcd вдвічі = inf Нескінченність в Double = inf Nanlll в Double = nan

Цікаві статті...