首页 > 解决方案 > 我的双精度数四舍五入,我不希望它

问题描述

我使用 ::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 这样的数字。当我输入一个较小的数字(如 1,234.83 或更大)时,程序开始弄乱小数。

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

标签: c++type-conversiondecimal

解决方案


您需要使用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
}

推荐阅读