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
stofpentru sume mari de bani:floatpierde 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.