0

I am trying to get the long double out of an array.

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

For some reason the num i am getting is rounded to 502522545.6 I am quite new to C++ so is there something i am doing wrong ? What needs to be done to get the entire number in the num instead of the rounded up?

Thank you for the help !!!

Sorry that's my first post here =)

So the entire program code is as following :

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;  
}

The idea is that the number entered is in the following format ($50,555,355.67) or any other number. The program then removes all signs apart of numbers and "." Then i tried to get the long double num out of an array. If you run the program you always get the rounded number from num.

olv1do
  • 13
  • 1
  • 5

3 Answers3

3

The C++ way of doing this is pretty 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;
}
tadman
  • 208,517
  • 23
  • 234
  • 262
2

Using modern C++ you can simply do:

auto line = "502522545.566"s;

auto num = std::stold(line);

Live example

Felix Glas
  • 15,065
  • 7
  • 53
  • 82
0

Theres probably a more C++ way, but sscanf will work:

const char *str = "3.1459";
long double f;
sscanf(str, "%Lf", &f);
Segmented
  • 795
  • 6
  • 13