fortran — Научная запись `d` не читается в переполнении стека

Мне нужно прочитать файл данных, в котором числа записаны в таком формате:

1.0d-05

C ++, похоже, не распознает этот тип научной нотации! Любые идеи о том, как я мог бы читать / конвертировать эти типы чисел?

Мне нужны цифры (т.е. double / float) не строки. Возможно, уже есть класс / заголовок для управления этим форматом, но я не смог его найти.

-1

Решение

Файлы, созданные программами Fortran, сообщают числа с двойной точностью (в научной записи) используя букву D вместо E.

Итак, ваши варианты:

  1. Предварительная обработка файла данных Fortran (простой Поиск и замена достаточно).
  2. Используйте что-то вроде:

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <vector>
    
    int main()
    {
    std::istringstream input("+1.234000D-5 -2.345600D+0 +3.456700D-2");
    
    std::vector<double> result;
    
    std::string s;
    while (input >> s)
    {
    auto e(s.find_first_of("Dd"));
    if (e != std::string::npos)
    s[e] = 'E';
    
    result.push_back(std::stod(s));
    }
    
    for (auto d : result)
    std::cout << std::fixed << d << std::endl;
    
    return 0;
    }
    

Также:

4

Другие решения