c++ - 我的双精度数四舍五入,我不希望它
问题描述
我使用 ::atof 将字符串转换为双精度,它可以转换,但它会将小数四舍五入,我不希望它这样做。
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 或更大)时,程序开始弄乱小数。
如果有人提供帮助,那将是巨大的帮助。谢谢!
解决方案
您需要使用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
}
推荐阅读
- angular - Angular:向另一个组件的数组添加值
- python - Python 真正的线程安全字典(“RuntimeError:字典在迭代期间更改了大小”避免)
- python - TensorFlow 解析和重塑 Dataset.map() 中的浮点列表
- php - PHP:如何基于相同的键合并行?
- json - .net Core 和 Serilog 电子邮件接收器 - json 配置
- sorting - bash 排序 -g 用于科学计数法(E 值)
- java - JAVA - 从动作侦听器调用时 JFrame 看起来不正确
- python - 解析在同一元素中定义元素前缀的 XML
- office-js - Outlook Web 加载项:第二次单击发送按钮未触发“事件”
- php - Laravel - 将上传的图像路径存储在数据库中,检索并显示图像