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 to Double = -44.01 -44.01e-3 to Double = -0.04401 0xf1bc to Double = 61884 0xf1bc.51 to Double = 61884.3 

Παράδειγμα 3: atof Cases για INFINITY και 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 to Double = inf Inf to Double = inf Nan σε Double = nan NAN σε Double = nan

Γενικά, ένα έγκυρο όρισμα κινητού σημείου για τη συνάρτηση atof () έχει την ακόλουθη μορφή:

 (κενό διάστημα) (- | +) (ψηφία) (.digits) ((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 INFINITY Abcd σε Διπλό = inf INFINITY σε Διπλό = inf

ενδιαφέροντα άρθρα...