我使用:: 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或更大)时,程序将开始混淆小数点。
如果有人帮助,那将是巨大的帮助。谢谢!
答案 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
}