Сейчас на форуме: _MBK_ (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Что за казус с FloatToStrF? |
Посл.ответ | Сообщение |
|
Создано: 09 декабря 2010 17:05 · Личное сообщение · #1 Хотел поместить вопрос в раздел "Программирование", но прочитав правила, пишу здесь. И так, в чем суть. Нужно создать текстовый файл из фала данных типа Single. В общих чертах: в одном столбце, шаг по оси координат, в другом - значение. Вроде все просто и обыденно. Читаю из файла данных, перевожу в строку с помощью FloatToStrF и пишу в текстовый файл. Теперь собственно вопрос! Шаг квантования по оси координат 0.2, то есть ...100.0; 100.2; 100.4 и т.д. Но при записи в текстовый файл получается следующее: 100.0 100.2 100.4 ... ... ... 120.3 120.5 // Хотя отладчик показывает в значении, 120.57(то есть, вроде ф-я должна округлить до 120.6) И далее снова 166.4 166.6 ... В гугле ни чего не нарыл (с первых страниц). Мне нужно, что бы все было четко (четно) ![]() Если кто сталкивался, подскажите, как эту траблу исправить? ![]() |
|
Создано: 09 декабря 2010 17:20 · Личное сообщение · #2 |
|
Создано: 10 декабря 2010 06:41 · Личное сообщение · #3 Округление в делфи тоже не по общему стандарту работает. Для точных вычислений я использую вот эту функцию: Code:
----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 10 декабря 2010 09:58 · Поправил: neomant · Личное сообщение · #4 |
|
Создано: 10 декабря 2010 10:18 · Личное сообщение · #5 |
|
Создано: 12 декабря 2010 06:47 · Личное сообщение · #6 neomant пишет: Функия форматирования строки из числа не делает округления. Посмотрев некоторые примеры и описания вижу, что вроде как округляет. Вот что видно в отладчике: х строка 69,79 -> "69.8" // округляет 69,59 -> "69.6" // округляет 69,39 -> "69.3" // ни хрена Быстрее всего в формате описан вывод одного знака после запятой, что собственно и происходит. Так и есть. Спасибо за ответы и советы. Буду внедрять. ![]() Тему пока закрывать не буду. ![]() |
|
Создано: 12 декабря 2010 08:04 · Личное сообщение · #7 Code:
Код проверялся в Dephi 7 с разными типами вещественных переменных, работает корректно. Показывайте свой код. ----- Следуй за белым кроликом ![]() |
|
Создано: 13 декабря 2010 14:50 · Поправил: Spirt_Fire · Личное сообщение · #8 neomant пишет: Показывайте свой код. Показывать то особо нечего. Простейший код. Вместо ffNamber использую ffFixed, потому как лишние запятые-точки мне ненужны. Взял, тупо, переустановил Delphi и все заработало. ![]() While not Eof(Файл данных) do begin Read(Файл данных, znachenie); stroka1:=FloatToStrF(start, ffFixed, 7,1); stroka2:=FloatToStrF(znachenie, ffFixed, 7,4); writeln(ФайлTXT,' ',stroka1,' ',stroka2); start:=start+step; ... ... ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Что за казус с FloatToStrF? |
Эта тема закрыта. Ответы больше не принимаются. |