std::stod în C++

Transformă un text într-un număr real: stod în double, stof în float.

Sintaxă
#include <string>
double stod(const std::string& text, std::size_t* pozitie = nullptr);
float stof(const std::string& text, std::size_t* pozitie = nullptr);

Ce face std::stod

std::stod("19.99") returnează numărul 19.99 ca double; std::stof returnează float (precizie mai mică, aproximativ 7 cifre). Se acceptă și notația științifică ("1.5e3"), "inf" și "nan".

Separatorul zecimal este punctul. Un text scris românește, cu virgulă ("19,99"), este citit doar până la virgulă, deci dă 19. Ca la stoi, erorile aruncă std::invalid_argument sau std::out_of_range.

Parametri

Parametru Descriere
text Textul de convertit.
pozitie Opțional: unde se scrie numărul de caractere folosite.

Ce returnează

Numărul real citit.

Exemple

Exemplul 1: Prețuri citite din text

#include <iostream>
#include <string>

int main() {
    std::string preturi[] = {"19.99", "4.5", "1.2e3", "  7"};
    double total = 0;
    for (const auto& p : preturi) {
        total += std::stod(p);
    }
    std::cout << "Total: " << total << " lei\n";
    std::cout << "Cu virgulă: " << std::stod("19,99") << '\n';
}

Rezultat

Total: 1231.49 lei
Cu virgulă: 19

Exemplul 2: float are mai puține cifre exacte

#include <iomanip>
#include <iostream>
#include <string>

int main() {
    std::string pi = "3.14159265358979";
    std::cout << std::setprecision(15);
    std::cout << "stod: " << std::stod(pi) << '\n';
    std::cout << "stof: " << std::stof(pi) << '\n';
}

Rezultat

stod: 3.14159265358979
stof: 3.14159274101257

Greșeli frecvente

  • Citești valori scrise cu virgulă zecimală (din Excel românesc): primești doar partea întreagă. Înlocuiește virgula cu punct înainte.
  • Folosești stof pentru sume mari de bani: float pierde precizie după aproximativ 7 cifre.

Comenzi înrudite

  • std::stoi: Transformă un text în număr întreg (int, long, long long, unsigned long), cu excepții la erori.
  • std::from_chars: Citește un număr dintr-un text, foarte rapid, fără excepții, cu raport exact despre erori.
  • std::to_string: Transformă un număr în std::string, de exemplu 42 în „42”.
  • std::setprecision: Controlează câte cifre sau zecimale au numerele reale afișate, cu fixed și scientific.