Чтение REAL из файла в FORTRAN 77 - странные результаты - PullRequest
1 голос
/ 30 июня 2010

В настоящее время я возлюсь с Фортраном 77 и столкнулся с проблемой, которую, похоже, не могу понять.Я пытаюсь прочитать из файла, который выглядит примерно так:

000120     Description(s) here       18     7     10.15
000176     Description(s) here       65     20    56.95
...

Последний столбец в каждой строке представляет собой денежную сумму (никогда не больше 100).Я пытаюсь прочитать файл, используя код, подобный приведенному ниже

          integer pid, qty, min_qty
          real price
          character*40 descrip

          open(unit=2, file='inventory.dat', status='old')
          read(2, 100, IOSTAT=iend) pid, descript, qty, min_qty, price
100       format(I11, A25, I7, I6, F5)

Кажется, что все читается очень хорошо, за исключением последнего столбца.Когда я проверяю значение цены, скажем, например, для второй строки;вместо 56,95 я получаю что-то вроде 56,8999999999.

Теперь я понимаю, что у меня могут быть трейлинг 9 или еще много чего, потому что это не совсем точно, но не должно ли это быть немного ближе к 95 центам?Может быть, я что-то не так делаю, я не уверен.Надеюсь, я просто не застрял с моей программой, работающей так!Любая помощь с благодарностью!

1 Ответ

1 голос
/ 30 июня 2010

Это именно тот код, который вы используете для чтения файла?У вас есть форматы "X" для выравнивания столбцов?Такие как (I11, A25, 2X, I7, 3X, I6, 3X, F5) (с вымышленными значениями).Если вы выровняете выравнивание на единицу и читаете только «56,9» для «56,95», то неточность с плавающей запятой может легко дать вам 56,89999, что очень близко к 56,9

Вы также можете прочитать строку в строкуи читать числа из подстрок - это потребует только точного определения местоположения строки.Когда подстроки содержат только пробелы и числа, вы можете использовать менее привередливое чтение, направленное на ввод-вывод: read (string (30:80), *) qty, min_qty, price.

...