首页 > 解决方案 > string to double 或 float 截断小数点

问题描述

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

标签: c++

解决方案


您需要更改精度。您正在寻找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

有关该主题的更多信息,请参阅答案。


推荐阅读