要加倍或浮点的字符串会截断小数点

时间:2018-11-23 19:46:34

标签: c++

我不知道我在做什么错,但我想使用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"

1 个答案:

答案 0 :(得分:2)

您需要更改精度。 std::setprecisionstd::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答案。