C++ std::流双精度值没有科学,也没有固定的小数计数
c++ std::stream double values no scientific and no fixed count of decimals
以下代码将打印 a 和 b 的值:
double a = 3.0, b=1231231231233.0123456;
cout.setf(std::ios::fixed);
cout.unsetf(std::ios::scientific);
cout << a << endl << b << endl
输出为:
3.000000
1231231231233.012451
您可以看到 a 是用固定的 6 位小数输出的。但我想要这样的输出:
3
1231231231233.012451
如何只设置一次标志,并输出上述结果。
流在双精度后插入 0
s,因为流输出浮点值的默认精度为 6。不幸的是,没有直接的方法可以检查双精度是否表示整数(因此您只能打印整数部分)。但是,您可以做的是将值转换为整数。
std::cout << static_cast<int>(a);
浮
点数的默认格式将不支持请求的格式。基本上可以使用三种设置:
-
std::fixed
将使用小数点后的precision()
位数字。 -
std::scientific
将使用带有precision()
数字的科学记数法。 -
std::defaultfloat
,它将选择两种形式中较短的一种。
(也有std::hexfloat
,但这只是将数字格式化为方便机器可读的形式)。
您可以做的是创建自己的std::num_put<char>
方面,该方面使用std::fixed
格式化将值格式化为本地缓冲区,然后再发送值。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- STD :: SetPrecision不显示尾随的小数
- C++ std::流双精度值没有科学,也没有固定的小数计数
- 非成员 std::固定大小数组的空重载的返回值
- 使用零大小数组的std::swap()编译错误
- std:vector<char[30]>有效,或者如何实现这一点?(固定大小数组的向量?
- 如何使用std::cout停止输出像5.0这样的数字的小数和零?