2015-03-06 2 views
0

J'essaie d'obtenir le double long d'un tableau.Utiliser strtol pour obtenir un double long en C++

long double num; 
char * pEnd; 
char line[] = {5,0,2,5,2,2,5,4,5,.,5,6,6}; 
num = strtold(line1, &pEnd); 

Pour une raison quelconque le num je reçois est arrondi à 502522545,6 Je suis tout à fait nouveau pour C++ est donc quelque chose que je fais mal? Que faut-il faire pour obtenir le nombre entier dans le num au lieu de l'arrondi?

Merci pour votre aide !!!

Désolé c'est mon premier post ici =)

donc l'intégralité du code du programme est le suivant:

class Number 
{ 
private: 

    long double num ; 
    char line[19], line2[19]; 
    int i, k; 
public: 

    Number() 
    {} 

    void getData() 
    { 
     i = 0; 
     char ch= 'a'; 
     cout << "\nPlease provide me with the number: "; 
     while ((ch = _getche()) != '\r') 
     { 
      line[i] = ch; 
      line2[i] = ch; 
      i++; 
     } 
    } 
    void printData() const 
    { 
     cout << endl; 
     cout << "Printing like an Array: "; 
     for (int j = 0; j < i; j++) 
     { 
      cout << line[j]; 
     } 
     cout << "\nModified Array is: "; 
     for (int j = 0; j < (i-k); j++) 
     { 
      cout << line2[j]; 
     } 
     cout << "\nTHe long Double is: " << num; 

    } 
    void getLong() 
    { 
     char * pEnd; 
     k = 1; 
     for (int j = 0; j < i; j++) 
     { 
      if (line2[j+k] == ',') 
      { 
       k++; 
       line2[j] = line2[j + k]; 
      } 
      line2[j] = line2[j + k]; 
     } 
     line2[i -k] = line2[19]; 
     num = strtold(line2, &pEnd); 
    } 
}; 

int main() 
{ 
    Number num; 
    char ch = 'a'; 
    while (ch != 'n') 
    { 
     num.getData(); 
     num.getLong(); 
     num.printData(); 
     cout << "\nWould you like to enter another number ? (y/n)"; 
     cin >> ch; 
    } 
    return 0; 
} 

L'idée est que le nombre entré est dans le format suivant (50,555,355.67 $) ou tout autre nombre. Le programme supprime alors tous les signes à part des nombres et "." Puis j'ai essayé d'obtenir le long double num d'un tableau. Si vous exécutez le programme, vous obtenez toujours le nombre arrondi de num.

+3

Ce code C++ n'est pas valide. Qu'essayez-vous de faire? – tadman

+4

Êtes-vous ** positif ** que c'est votre code? Je ne connais aucun compilateur qui accepterait cela. –

+0

Vous pouvez ajouter un modificateur à sscanf pour lire les doubles longs. – Segmented

Répondre

0

Theres probablement plus C++ façon, mais sscanf fonctionnera:

const char *str = "3.1459"; 
long double f; 
sscanf(str, "%Lf", &f); 
3

Le C++ façon de le faire est assez simple:

#include <sstream> 
#include <iostream> 
#include <iomanip> 

int main() { 
    const std::string line = "502522545.566"; 
    long double num; 

    std::istringstream s(line); 

    s >> num; 

    std::cout << std::fixed << std::setprecision(1) << num << std::endl; 
} 
+1

Ne pas oublier les #include , #include et #include MagikWorx

+0

Ceux ont été omis pour plus de clarté, mais oui, ceux qui seront nécessaires. Bon point. – tadman

+0

J'aurais aimé qu'il y ait quelque chose de similaire à std :: to_string ... – Segmented

2

utilisant C moderne ++ vous pouvez simplement faire:

auto line = "502522545.566"s; 

auto num = std::stold(line); 

Live example