Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2013, 12:48   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
FloatToStrF есть? Им удобней отображать
Нету =(

Цитата:
Вам же объяснили, что 4.09090000000000E+0004 и 40909 - это одно и тоже, просто разная форма записи.
Угу. Пойду погуглю - почему так.
Человек_Борща вне форума Ответить с цитированием
Старый 29.10.2013, 14:01   #12
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

если есть сомнения просто скопируй в эксель только точку на запятую поменяй. и будет видно простое число надеюсь ты доверяешь экселю в плане пониманий чисел? формат ячейки экспоненциальный.
Цитата:
Экспоненциальный
Отображает число в экспоненциальном представлении, заменяя часть числа на E+n, где E обозначает экспоненциальное представление, то есть умножение предшествующего числа на 10 в степени n. Например, экспоненциальный формат с двумя знаками в дробной части отображает 12345678901 как 1,23E+10, то есть 1,23, умноженное на 10 в 10-й степени. Можно задать количество знаков в дробной части.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 29.10.2013 в 14:04.
IliaIT вне форума Ответить с цитированием
Старый 29.10.2013, 18:29   #13
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Да хоть ты тресни. Как мне эту точку сдвинуть?
Код:
d1 = 01.01.2012 
d2 = 29.10.2013 
Hours between = 1 
Hours span =  1.60146972575000E+0004
Hours between должно быть 16014
Выяснилось, что проблема упирается в сдвиг точки.
Вижу вариант в строке находить точку и самому её сдвигать, затем назад преобразовывать в число. Но продолжаю верить, что есть другой способ.
Умножение на 10^4 не сдвигает ё**ю точку с места.

Вопрос закрыт. В недрах исходников выкопал FloatToStrEx которое задает тот самый сдвиг.

Последний раз редактировалось Человек_Борща; 29.10.2013 в 19:00.
Человек_Борща вне форума Ответить с цитированием
Старый 29.10.2013, 18:51   #14
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,866
По умолчанию

RoundTo используйте.
Arigato вне форума Ответить с цитированием
Старый 30.10.2013, 08:57   #15
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

хмм. а для чего вам эта дата в дабл варианте в строковом представлении? может лучше её разложить далее на байтовый вариант числа? и передавать по байтам? вы же понимаете что точность теряется при конвертации в строку и обратно в число (если конечно делаете это, а иначе зачем вообще это строковое представление)
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 30.10.2013, 10:19   #16
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Arigato, нету там такого Компилятор со своей атмосферой.
IliaIT, Нужна библиотека работы с датами. Такой нет в наличии. Пишу свою, аналогичную Delphi.

Большая точноть не нужна.

Delphi при переводе даты в вещественное сдвигает точку на 4 бита вправо.
В этом компиляторе точка никуда не сдвигается, получается что результат получается неправильным.

Вот пример:
2 даты:
d1 = 01.01.2012
d2 = 29.10.2013

Задача, узнать кол-во часов между этими датами.

Решается так:
= Trunc(24 * (d2 - d1))

Для delphi, результат в часах будет: 16014
Для этого компиля - 1 час.

Вот потому и нужны все эти ололо махинации,
а что потому, что в этот момент: 24 * (d2 - d1)

Для delphi результат равен: 16014,6972575000E+0004
В моём случае, странным образом получается: 1,60146972575000E+0004

Потому нужны все эти махинации.
Человек_Борща вне форума Ответить с цитированием
Старый 30.10.2013, 10:35   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Для delphi, результат в часах будет: 16014
и
Цитата:
Для delphi результат равен: 16014,6972575000E+0004
взаимоисключающее. Последнее равно 160146972.575 Или запись неверная, или вы так и не разобрались с порядком и мантисой. Наверно так
Код:
16014,6972575000E+0000
или, что тоже самое
1,60146972575000E+0004
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.10.2013, 10:38   #18
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

это строка, нафик вам строка?
eval вне форума Ответить с цитированием
Старый 30.10.2013, 11:00   #19
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
это строка, нафик вам строка?
Потому что нет функции Trunc, потому что нет shl, shr, потому что только через строку можно сделать аналог Trunc. И наконец в строке точка была не там, где должна. И дальнейшие вычислиения с 1, а не с 16014 - приводили к плохим результатам, в целом.
Цитата:
16014,6972575000E+0000
или, что тоже самое
1,60146972575000E+0004
Быть может в процессоре, но не в строке.
В итоге мне нужен был кусок строки(целое от дроби).
Человек_Борща вне форума Ответить с цитированием
Старый 30.10.2013, 11:05   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ладно. В дельфи Round возвращает int64 и его спокойно в строку можно преобразовать с помощью IntToStr, не используя всяких FloatToStr и аналогов. Если вообще это нужно. В вашем навороченном компиляторе такое не катит?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приведение типов _PROGRAMM_ Общие вопросы C/C++ 2 10.10.2013 19:15
приведение типов??? nikozavr C# (си шарп) 1 14.05.2011 22:29
Приведение пользовательских типов peplenko Общие вопросы C/C++ 6 18.04.2011 12:59
С - приведение типов onewho Общие вопросы C/C++ 3 21.11.2010 00:12
Приведение типов в Qt mike_tihomirov Qt и кроссплатформенное программирование С/С++ 1 19.06.2010 13:14