c++ - 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"
解决方案
您需要更改精度。您正在寻找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
有关该主题的更多信息,请参阅此答案。
推荐阅读
- swift - 如果文件不存在则更改视图
- wordpress - 在 Woocommerce 单一产品视图中显示类别名称
- python - 下载文件并将其保存到 Heroku dyno 文件系统
- javascript - 使用 JavaScript 制作计算器但它不起作用
- node.js - NPM 构建问题
- c++ - 在接受私有类型参数的公共类上声明私有方法
- javascript - Angular + SVG:如何从字符串动态加载模板
- python - 层之间的 Pytorch 操作(相加和平均)
- c# - 我是否正确实现了工厂设计模式?我该如何改进这个架构?
- refit - 是否有任何替代 Refit 来支持同步方法