C ++ strtod () - Стандартна бібліотека C ++

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

Ця функція також встановлює покажчик, який вказує на перший символ після останнього дійсного символу рядка, якщо такий є, інакше вказівник встановлюється як нульовий.

Для основи 10 і рядка "12abc"

Дійсна числова частина -> 12

Перший символ після дійсної числової частини -> a

Це визначається у файлі заголовка.

прототип strtod ()

 подвійний strtod (const char * str, char ** end);

Функція strtod () приймає рядок і вказівник на символ як свій параметр, інтерпретує вміст рядка як floatчисло і повертає doubleзначення.

strtod () Параметри

  • str : рядок, що представляє число з плаваючою комою.
  • end : Посилання на вже виділений об'єкт типу char *. Значення end встановлюється функцією наступному символу в str після останнього дійсного символу. Цей параметр також може бути нульовим покажчиком, і в цьому випадку він не використовується.

strtod () Повернене значення

Функція strtod () повертає:

  • подвійне значення (яке перетворюється із рядка).
  • 0.0, якщо не вдалося виконати дійсне перетворення.

Якщо перетворене значення виходить за межі діапазону, виникає помилка діапазону і повертається позитивний або від’ємний HUGE_VAL.

Приклад 1: Як працює функція strtod ()?

 #include #include using namespace std; int main() ( char numberString() = "12.44b 0xy"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Коли ви запускаєте програму, результат буде:

 Число в кінцевому рядку = 12.44b 0xy Номер у подвійному = 12.44 рядка = b 0xy

Приклад 2: функція strtod () без кінцевих символів

 #include #include using namespace std; int main() ( char numberString() = "12.44"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; // If end is not Null if (*end) ( cout << end; ) // If end is Null else ( cout << "Null pointer"; ) return 0; ) 

Коли ви запускаєте програму, результат буде:

 Число в кінцевому рядку = 12.44b 0xy Номер у подвійному = 12.44 Нульовий покажчик

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

  • Для десяткового значення з плаваючою комою :

    • Група десяткових цифр (0-9), за бажанням містить десяткову крапку (.).
      Наприклад: 13.170, -5.63 тощо.

    • Необов’язкова експонента (e або E), за якою слідує необов’язковий знак + або - та непуста послідовність десяткових цифр.
      Наприклад: 3.46101e + 007, 13.19e-013 тощо.

  • Для шістнадцяткового значення з плаваючою комою :

    • Рядок, що починається з 0x або 0X, а потім непуста послідовність шістнадцяткових цифр, за бажанням містить десяткову крапку (.).
      Наприклад: 0xfa5, -0xb1f.24 тощо.

    • Необов’язкова частина показника (p або P), за якою слідує необов’язковий знак + або - та непуста послідовність шістнадцяткових цифр.
      Наприклад: 0x51c.23p5, -0x2a.3p-3 тощо.

  • Нескінченність :

    • INF або INFINITY (ігноруючи регістр).
      Наприклад: -Inf, InfiNiTy тощо.

  • NaN (не число) :

    • NAN або NANпослідовність (ігноруючи регістр), де послідовність - це послідовність символів, що складається лише з буквено-цифрових символів або підкреслення (_). Результат - тихий NaN.
      Наприклад: Nan, NaNab1 тощо.

Приклад 3: Як strtod () працює з експонентами та шістнадцятковою системою?

 #include #include #include using namespace std; int main() ( // initialize a exponential value char numberString() = "-44.01e-3End String"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl << endl; // initialize a new hexadecimal value strcpy(numberString,"0xf1bc.51hello"); number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Коли ви запускаєте програму, результат буде:

 Номер у рядку = -44.01e-3Кінець номера рядка у подвійному = -0.04401 Кінцевий рядок = Кінцевий номер рядка у рядку = 0xf1bc.51привіт Номер у подвійному = 61884.3 Кінцевий рядок = привіт

Приклад 4: Strtod Випадки для нескінченності та NaN

 #include #include using namespace std; int main() ( char *end; cout << "INFINITY" << " to Double = " << strtod("INFINITY", &end) << endl; cout << "End String = " << end << endl << endl; cout << "Infabc" << " to Double = " << strtod("Infabc", &end) << endl; cout << "End String = " << end << endl << endl; cout << "NaN12a" << " to Double = " << strtod("NaN12a", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Коли ви запускаєте програму, результат буде:

 INFINITY для подвоєння = inf Кінцева рядок = Infabc до Double = inf Кінцева рядок = abc NaN12a до Double = nan End String = 12a

Загалом, дійсний аргумент з плаваючою комою для функції strtod () має такий вигляд:

(пробіли) (- | +) (цифри) (.знаки) ((e | E) (- | +) цифри)

Функція strtod () ігнорує всі провідні пробіли, поки не буде знайдено основний непробіл.

Потім, починаючи з цього символу, потрібно якомога більше символів, які формують дійсне подання з плаваючою точкою і перетворюють їх у значення з плаваючою точкою. Все, що залишилось від рядка після останнього дійсного символу, зберігається в об'єкті, вказаному кінцем.

Приклад 5: функція strtod () з пробілами, що ведуть

 #include #include using namespace std; int main() ( char *end; cout << "25.5" << " to Double = " << strtod(" 25.5", &end) << endl; // end pointer is set to null cout << "End String = " << end << endl << endl; // Returns 0 because of invalid conversion cout << "abc11.20" << " to Double = " << strtod("abc11.20", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Коли ви запускаєте програму, результат буде:

 Від 25,5 до Double = 25,5 Кінцевий рядок = abc11,20 до Double = 0 Кінцевий рядок = abc11,20

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