c++ - 从文件中读取并在 C++ 中转换为 double

标签 c++ string double

我在读取文件并将内容转换为 double 时遇到问题。我已经阅读了 stackoverflow 的解决方案,但没有任何效果。

我有这个输入文件:

1291.23
291.493
558.089
309.266
513.656
491.44
429.234
851.345
589.192
535.873
802.469
713.604
1002.42
997.973
513.656
313.709
407.018
624.738
460.337
526.986
473.667
1202.36

和程序:

#include <math.h> 
#include <string> 
#include <iostream> 
#include <fstream> 
#include <stdio.h> 
#include <sstream> 

using namespace std; 
void main() { 
    char* filename = "mr1.txt"; 
    ifstream fin; 
    fin.open(filename); 
    float d;// = 0.0; 
    int v = 0; 
    while (v < 21){ 
        fin>>d; 
        if(v >= 2 || v < 15){ 
            cout<<d<<endl;
        } 
        v++; 
    } 
}

输出为:1291 12次

我怎样才能毫无问题地将这些文件转换为 double?谢谢!

最佳答案

你的代码有几处错误,但没有一个会 解释您描述的症状(代码不可能 你已经发布了:你循环了 40 次,并且每次都在循环中输出)。 无论如何:

  • 你在 `if` 中的条件是错误的,所以它总是正确的: `v` 总是大于 2 或小于 15,
  • 你在 `while` 中的条件是错误的;你在尝试 读取 40 个值,不管文件中有什么

你的循环可能应该是这样的:

while ( fin >> d ) {
    if ( v >= 2 && v < 15 ) {
        std::cout << v << std::endl;
    }
    ++ v;
}

这将导致显示元素 [2, 15),前提是它们是 目前。

如果你总是显示相同的值,可能是输入 在该值失败后,假设您不测试您的输入是否 成功与否。一种可能的解释是提到的一只莫拉 注意:当你打开一个文件时,它会充满当前的全局 语言环境。尝试:

fin.imbue(std::locale("C"));

打开文件后立即;在大多数地区,十进制 分隔符是逗号,不是点。 (另外:检查打开的 成功了。)

关于c++ - 从文件中读取并在 C++ 中转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5501496/

相关文章:

c# - 使用 C++ 填充数组将字节数组从 C# 传递到 C++ com 对象

C++ -- ' ' 之前的预期主表达式

java 字符串的不变性

php - PHP 中的数学错误 - 数字被截断?

c++ - 从 double* 转换为 int 会失去精度

c++ - 无法在 C++ 中包含头文件

c++ - 对 64 位整数中的相邻位进行或运算的有效方法

linux - 在 bash 脚本中连接字符串(与 shell 不同的行为)

Javafx double 变量,具有两位小数

c++ - 将类型安全代码与运行时决策相结合