Мой двойник округляет десятичные дроби, и я не хочу, чтобы это - PullRequest
0 голосов
/ 18 января 2019

Я преобразовал строку в двойное число, используя :: atof, он преобразует ОК, но округляет десятичную, и я этого не хочу.

string n;
double p;

cout << "String? :" << endl;
cin >> n

p = ::atof(n.c_str());
cout << p << endl;

Я обычно набираю цифры, например, 123 456,78, 12 345,87, 123 456 789,12. Когда я набираю меньшее число, например, 1234,83 ​​или больше, программы начинают путаться с десятичными числами.

Было бы очень полезно, если бы кто-нибудь помог. Спасибо!

1 Ответ

0 голосов
/ 18 января 2019

Вам необходимо установить точность, используемую при отправке данных в выходной поток, используя setprecision, как показано ниже.

Конечно, проблема с этим кодом в том, что atof() не лучший вариант. Однако для ответа на ваш вопрос использование atof() не имеет значения.

#include <iomanip>  
#include <iostream>  
#include <string>

int main()
{
    double x;
    std::string n;

    std::cout << "String? :" << std::endl;
    std::cin >> n;

    x = ::atof(n.c_str());
    std::cout << std::setprecision(10) << x << std::endl;
}

Для преобразования и отлова ошибок преобразования вы можете использовать следующее:

try
{
    x = std::stod(n);
}
catch(std::invalid_argument)
{
    // can't convert
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...