为什么将 std::d ouble_t 流式传输到 std::cout 不会给我小数位?
Why doesn't streaming a std::double_t to std::cout give me decimal places?
我有这个最小的代码
#include <iostream>
#include <string>
#include <random>
int main() {
std::vector<std::double_t> rationalNumbers;
std::vector<std::string> input {"1", "2", "54"};
for (auto &st : input)
{
rationalNumbers.push_back((std::double_t) std::stod(st));
}
for (auto &number : rationalNumbers)
{
std::cout << "Number: " << number << std::endl;
}
}
当我在第二个循环中打印rationalNumbers
时,我得到
数字: 1 数字: 2 数字: 54
有人可以告诉我为什么输出不是
编号: 1.0 编号:2.0 编号: 54.0
因为它们不应该再是整数了,否则它会与std::vector<std::double_t> rationalNumbers;
冲突还是我错了?
您的问题基于一个错误的前提,即流式传输浮点类型的值会自动为您提供一个小数位。它没有,也从来没有。
您将类型/形式与表示混淆。在某些情况下,以与浮点值1.0
相同的方式显示整数1
是完全合理的,因为它们是相同的数字。
要获得定点表示,您可以使用std::fixed
。或者探索其他一些 I/O 操纵器。最终,此数字的呈现方式取决于您。
相关文章:
- std::cout.imbue()多重调用
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- std::cout输出int时出现编译错误
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- std::cout 来自多个线程
- 在 c++ 中以十六进制格式打印无符号字符(BYTE).使用 std::cout
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 是否可以为 std::cout 创建别名?
- std::cout 在打印变量与函数表达式时的行为不同
- 带有 std::cout 的多线程控制台文本动画
- 捕获/禁止发送到 std::cout 的 OpenCV 警告
- printf() 和 std::cout 在指针方面的区别
- 使用字符串流加速 std::cout 日志记录
- 是否可以在每次使用std::cout时执行一个函数
- 为什么'std::cout << !+2 '输出 0?
- 如何将自定义类传递给std::cout
- 对于输出,std::copy是否比std::cout快