我的双胞胎正在四舍五入小数,我不希望它

时间:2019-01-17 23:42:53

标签: c++ type-conversion decimal

我使用:: atof将字符串转换为双精度,它转换为OK,但是将小数点四舍五入,我不希望这样做。

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之类的数字。当我输入一个较小的数字(例如1,234.83或更大)时,程序将开始混淆小数点。

如果有人帮助,那将是巨大的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

如下所示,您需要设置使用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
}