Функцията strtod () в C ++ интерпретира съдържанието на низ като число с плаваща запетая и връща стойността му като двойно.
Тази функция също така задава указател, който да сочи към първия символ след последния валиден символ на низа, ако има такъв, в противен случай указателят е зададен за нула.
За основа 10 и низа "12abc"
Валидна цифрова част -> 12
Първи знак след валидна цифрова част -> a
Той се определя в заглавния файл.
strtod () прототип
двоен strtod (const char * str, char ** end);
Функцията strtod () приема низ и указател към символ като свой параметър, интерпретира съдържанието на низ като float
число и връща double
стойност.
strtod () Параметри
- str : низ, представящ число с плаваща запетая.
- край : Препратка към вече разпределен обект от тип 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 Номер на крайния низ в Double = -0.04401 Краен низ = Номер на краен низ в низ = 0xf1bc.51поздравителен номер в Double = 61884.3 Краен низ = здравей
Пример 4: strtod Случаи за INFINITY и 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 към Double = inf Краен низ = Infabc към Double = inf Краен низ = abc NaN12a до Double = nan Краен низ = 12a
По принцип валиден аргумент с плаваща запетая за функцията strtod () има следната форма:
(празно пространство) (- | +) (цифри) (.цифри) ((д | Е) (- | +) цифри)
Функцията strtod () игнорира всички водещи символи за интервали, докато не бъде намерен основният символ, който не е интервал.
След това, започвайки от този знак, са необходими колкото се може повече символи, които формират валидно представяне с плаваща запетая и ги преобразуват в стойност с плаваща запетая. Всичко, което е останало от низа след последния валиден символ, се съхранява в обекта, посочен от end.
Пример 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