Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';从std::double\u t到std::能给我小数点吗?_C++ - Fatal编程技术网

C++ 为什么';从std::double\u t到std::能给我小数点吗?

C++ 为什么';从std::double\u t到std::能给我小数点吗?,c++,C++,我有这个最小的代码 #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) {

我有这个最小的代码

#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;
    }
}
#包括
#包括
#包括
int main(){
向量有理数;
向量输入{“1”、“2”、“54”};
用于(自动&st:输入)
{
合理数字。推回((标准::双标准)标准::stod(标准));
}
用于(自动编号和编号:理性编号)
{

std::cout您的问题基于一个错误的前提,即流式处理浮点类型的值会自动给您一位小数。它不会,而且永远不会

您将类型/形式与表示混淆。在某些情况下,以与浮点值
1.0
相同的方式显示整数
1
,这是完全合理的,因为它们是相同的数字


要获得定点表示,您可以使用std::fixed
。或者探索其他方法。最终,这个数字的呈现方式取决于您。

您的问题基于一个错误的前提,即浮点类型的值流式传输会自动给您一个小数位。它不会,也永远不会

您将类型/形式与表示混淆。在某些情况下,以与浮点值
1.0
相同的方式显示整数
1
,这是完全合理的,因为它们是相同的数字


要获得定点表示,您可以使用
std::fixed
。或者探索其他方法。最终,这个数字的呈现方式取决于您。

如果您愿意,请更改
精度。@MatthieuBrucher我是这样做的
std::cout如果您愿意,请更改
精度。@MatthieuBrucher我是这样做的。@MatthieuBrucher我是这样做的我不喜欢这个std::我可能错过了提到的重复问题。所以我在
rationalNumbers
中的数字实际上是双倍的(即x.0),因为
(std::double\u t)std::stod(st)
为了看到定点表示,我只需要调整输出,对吗?@TalG:没错。事实上,你根本不需要强制转换;你正在将它们添加到
std::double\t
的容器中,所以
std::double\t
s就是它将包含的内容-如果没有从
double
s进行隐式转换的话(这就是
std::stod(st)
给你的)那么你的程序就不会编译了。(也就是说,即使在技术上是多余的,编写显式代码也不是没有好处的。YMMV。)谢谢你的解释!所以我甚至可以使用
std:stoi(st)
将字符串读取为整数,它们将被隐式转换为我的容器类型,在本例中为
std::double\t
。你能给我一个基于我的代码的显式转换示例吗?@TalG没错。(显式转换示例就是你正在做的!)是的,我有一秒钟感到困惑:D.我错过了提到的重复问题。所以我在
rationalNumbers
中的数字实际上是双倍的(即x.0),因为
(std::double\u t)std::stod(st)
为了看到定点表示,我只需要调整输出,对吗?@TalG:没错。事实上,你根本不需要强制转换;你正在将它们添加到
std::double\t
的容器中,所以
std::double\t
s就是它将包含的内容-如果没有从
double
s进行隐式转换的话(这就是
std::stod(st)
给你的)那么你的程序就不会编译了。(也就是说,即使在技术上是多余的,编写显式代码也不是没有好处的。YMMV。)谢谢你的解释!所以我甚至可以使用
std:stoi(st)
将字符串读取为整数,它们将被隐式转换为我的容器类型,在本例中为
std::double\t
。你能给我一个基于我的代码的显式转换示例吗?@TalG是的。(显式转换的示例就是你正在做的!)对,我有一秒钟感到困惑:D。