我不知道我在做什么错,但我想使用std :: stod将字符串转换为双精度,但会砍掉小数点
int main()
{
auto value = std::string("321415.1342");
auto val = std::stod(value, 0);
std::cout << val << '\n';
}
该程序产生:321415。stof也产生相同的结果。 如果有帮助,下面列出了我的语言环境。
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
答案 0 :(得分:2)
您需要更改精度。 std::setprecision和std::fixed是您要寻找的。您必须包括iomanip
:
#include <iostream>
#include <string>
#include <iomanip> // <- include this
int main()
{
auto value = std::string("321415.1342");
auto val = std::stod(value, 0);
std::cout << std::setprecision(5) << std::fixed << val << std::endl;
return 0;
}
输出:
321415.13420
有关该主题的更多信息,请参见this答案。