2009-11-04 4 views
0

Je dois lire une valeur de flot à partir de la chaîne jusqu'à 6 précision, le code actuel lit les 6 premiers chiffres seulement. Merci à l'avanceLire la valeur du flottant de la chaîne jusqu'à 6 précision

template <class T> 
bool from_string(T& t, const std::string& s, 
       std::ios_base& (*f)(std::ios_base&)) 
{ 
    std::istringstream iss(s); 
    return !(iss >> f >> t).fail(); 
} 

int main() 
{ 
    int i; 
    float f; 
// the third parameter of from_string() should be 
    // one of std::hex, std::dec or std::oct 
    if(from_string<int>(i, std::string("ff"), std::hex)) 
    { 
    std::cout << i << std::endl; 
    } 
    else 
    { 
    std::cout << "from_string failed" << std::endl; 
    } 

    if(from_string<float>(f, std::string("1456.909"), std::dec)) 
    { 
    std::cout << f << std::endl; 
    } 
    else 
    { 
    std::cout << "from_string failed" << std::endl; 
    } 
    return 0; 
} 

Répondre

2

Je suis tout à fait certain qu'il lit tous les chiffres. Le problème semble être dans ce que vous attendez. Mettons-nous un peu plus fort: Que voulez-vous arriver si vous lisez 1456.90900000000000000000000000000 dans un float?

1

Vous devez utiliser un double, plutôt qu'un flotteur si vous voulez faire mieux que 6 chiffres. Votre question dit «6 chiffres de précision» et aussi «6 premiers chiffres», mais vous présentez une entrée de 7 chiffres.

Le flotteur ne peut contenir que 6 chiffres de précision, c'est-à-dire x.yzpqrs ou xy.zpqrs ou xyzpq.rs. Si vous êtes après avoir occupé 6 décimales alors vous devez utiliser le double. Par exemple, cout.precision (7) vous permet d'afficher plus de décimales, ce qui dans ce cas affichera la bonne réponse, même si C ne stocke pas réellement 7 chiffres, juste quelque chose qui se rapproche de la bonne réponse.

Questions connexes