为什么将 std::d ouble_t 流式传输到 std::cout 不会给我小数位?

Why doesn't streaming a std::double_t to std::cout give me decimal places?

本文关键字:std cout 小数 ouble 为什么 传输      更新时间:2023-10-16

我有这个最小的代码

#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 操纵器。最终,此数字的呈现方式取决于您。