Функція 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