-1
votes

Comment obtenir tout numéro décimal de la chaîne en C ++

J'essaie d'obtenir une valeur (tout numéro décimal) d'un texte en C ++. Mais j'ai un problème et je ne pouvais pas le résoudre xxx

thefile.txt: xxx

lorsque j'exécute le code ci-dessus, < / p> xxx

mais je veux xxx

Que dois-je faire?

EDIT: je ne sais pas vouloir imprimer des et b. Je veux juste qu'ils obtiennent les valeurs exactes.net


15 commentaires

Votre ordinateur a-t-il suffisamment de précision dans un float pour le faire? Êtes-vous sûr?


@LighessRacesinorbit Je ne suis pas sûr de rien. Je ne veux pas imprimer a et b. Je veux juste a et b obtenir toutes les valeurs. S'ils obtiennent déjà toutes les valeurs et s'il apparaissent d'une manière courte à cause de l'impression, c'est bon. pouvez-vous me dire ?


@Nathanoliver j'ai accepté votre petite réponse. Merci mon ami


@Nathanoliver aussi quel type dois-je utiliser? double ou flotter?


Pour flotter A, B;


Vous pouvez vérifier la valeur réelle de la variable à l'aide d'un débogueur . Mais pour l'impression, le dupliquée répond bien.


@Yksisarvinen merci. aussi flotter a, b; est correct? ou devrais-je utiliser un double?


@Nathanoliver vraiment? Je pensais qu'un flotteur unique de précision de l'IEEE 754 ne garantissait que des chiffres significatifs de six-ish de six-ish (sauf contraintes de dégâts sur les pouvoirs de deux)


Qu'est-ce que "Cout.net"?


@LightnessRacesinorbit tu es correct. Je ne sais pas ce que je pensais. Ils auraient besoin d'un double pour une précision complète.


@Nathanoliver presque le week-end ....


@LightnessRacesinorbit Tu m'as fait confondre ...


@Nathanoliver tu m'as fait confondre ...


@Yksisarvinen tu as fait de moi confondre ...


@BayBayBay Votre commentaire (écrit trois fois!) N'ajoute rien à la discussion.


3 Réponses :


5
votes

vous ne pouvez pas.

a float ne peut que vous donner six (ish) décimal chiffres significatifs . Les valeurs de votre fichier, après la conversion de la chaîne, ne peuvent pas être conservées dans un float .

Tout d'abord, vous devez passer à double , sinon vous n'aurez même pas une variable avec la valeur numérique complète.

Puis, pour la sortie, soyez prudent pour Spécifiez la précision que vous voulez .

S'il vous plaît restez au courant des faiblesses de point flottant et envisagez de coller avec des chaînes, en fonction de ce que vous faites avec ces données.


0 commentaires

1
votes

Il y a deux choses principales que je vois dans votre code.

  1. float strong> La précision n'est pas suffisante pour vous des données dont vous avez besoin double strong> Type de données. LI>
  2. Vous devez définir une précision de couture appropriée pour obtenir la sortie souhaitée. LI> ol>

    Ce code fonctionnera pour vous. P>

    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
    
    int main()
    {
        std::ifstream infile("newfile.txt");
        double a, b;
        std::cout.precision(11);
        while (infile >> a >> b)
        {
            // process pair (a,b)
        }
    
        std::cout << a << " " << b;
    }
    


2 commentaires

Cela ne montre pas toute valeur lorsque je imprime. Mais je ne veux pas montrer, je veux juste qu'ils obtiennent les valeurs exactes. Ont-ils les valeurs exactes si j'utilise le double?


@BayBayBay Essayez-le et découvrez-le?



0
votes

Vous devez lire vos entrées dans une chaîne, puis les convertir en double (en fonction de suffisamment de précision dans le flotteur sur votre ordinateur). Vous pouvez afficher directement des chaînes. Une réponse possible est ici .

string word;  
openfile >> word;
double lol = atof(word.c_str());


2 commentaires

Pourquoi vous-même quand iOSTREAMS le fera pour vous? En code que l'OP est écrit?


@Shafiqaiqbal je n'ai pas eu tout ce que tu as dit