【问题标题】:how to get all decimal number from string in c++如何在c ++中从字符串中获取所有十进制数
【发布时间】:2019-07-31 13:19:20
【问题描述】:

我正在尝试从 C++ 中的文本中获取值(所有十进制数)。但我有一个问题,我无法解决它

#include "pch.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

int main()
{
    std::ifstream infile("C:\\thefile.txt");
    float a, b;
    while (infile >> a >> b)
    {
        // process pair (a,b)
    }

    std::cout << a << " " << b;

}

文件.txt:

34.123456789 77.987654321

当我运行上面的代码时,

a = 34.1235 
b = 77.9877

但我想要

a = 34.123456789 
b = 77.987654321

我该怎么办?

编辑:我不想打印出 a 和 b。我只是希望他们得到确切的值。net

【问题讨论】:

  • 您的计算机在float 中是否有足够的精度来做到这一点?你确定吗?
  • @LightnessRacesinOrbit 我不确定。我不想打印 a 和 b。我只想要 a 和 b 获得所有值。如果他们已经获得了所有值,并且由于打印而出现的时间很短,那没关系。你能告诉我吗?
  • @NathanOliver 我接受了你的小回答。谢谢兄弟
  • @NathanOliver 我应该使用哪种类型?双倍还是浮动?
  • 对于浮动 a, b;

标签: c++ string decimal


【解决方案1】:

你不能。

float 只能给你六个(ish)十进制重要数字。从字符串转换后文件中的值不能保存在 float 中。

首先,你需要切换到double,否则你连全数值的变量都没有。

然后,对于输出,请注意specify the precision you want

请注意浮点的弱点,并考虑坚持使用字符串,具体取决于您对这些数据的处理方式。

【讨论】:

    【解决方案2】:

    我在您的代码中看到了两个主要内容。

    1. float 精度不足以满足您需要 double 数据类型的数据。
    2. 您需要设置适当的 cout 精度才能获得所需的输出。

    此代码将为您工作。

    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
    
    int main()
    {
        std::ifstream infile("newfile.txt");
        double a, b;
        std::cout.precision(11);
        while (infile >> a >> b)
        {
            // process pair (a,b)
        }
    
        std::cout << a << " " << b;
    }
    

    【讨论】:

    • 当我打印出来时,这并没有显示所有的价值。但我不想展示,我只想让他们得到确切的值。如果我使用双精度,它们会得到确切的值吗?
    • @baybaybay 试试看?
    【解决方案3】:

    您应该将您的输入读入一个字符串,然后将它们转换为双精度(取决于您计算机上浮点数的足够精度)。您可以直接显示字符串。一个可能的答案是here

    string word;  
    openfile >> word;
    double lol = atof(word.c_str());
    

    【讨论】:

    • 当 IOStreams 会为您做这件事时,为什么要自己做呢?在 OP 编写的代码中?
    • @ShafiqaIqbal 我没听懂你说的所有内容
    猜你喜欢
    • 2021-02-26
    • 2010-09-18
    • 2011-04-04
    • 1970-01-01
    • 2013-04-02
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多