|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.02.2015, 16:08 | #1 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
FloatToStrF округление
На примере:
Есть NUMERIC(12,2) поле в базе, значение 1513.00, в датасете AsFloat делю на 2, результат в v: Double и делаю FloatToStrF(v,ffFixed,12,0) результат не стабилен - или 756, или 757. То есть после деления имею в результате или 756.49999... или 756.50000... Можно делать например FloatToStrF(v+0.01,ffFixed,12,0) и тогда всегда однозначно будет 757, что и нужно в данном случае Но не задача - возможно деление не только на 2, а и на другие числа и добавка маленькой константы может всю малину испортить. Хотелось бы услышать про другие способы обуздания округления в районе пятерки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
12.02.2015, 17:38 | #2 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Я думаю никак. Как вариант после деления обрезать до двух разрядов после запятой и только потом проводить округление.
Вариант 2. Делить нацело. То есть умножаете Ваш НУМЕРИК на 100 и div 2. Получите однозначные не скачущие результаты.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 12.02.2015 в 17:41. |
12.02.2015, 19:02 | #3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
12.02.2015, 19:16 | #4 |
Форумчанин
Регистрация: 22.02.2010
Сообщений: 912
|
Аватар, FloatToStrF не позволит тебе получить нормальный выход. Если уже делать эстетичное округление, то я бы советовал вычислять в SimpleRoundTo(), что позволит округлять по последнему разряду в большую сторону. Или RoundTo() - будет приводить округляемый разряд к ближайшему четному.
|
12.02.2015, 19:20 | #5 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А вот не пробовал. Нужно протестировать, возможно и поможет. Еще Currency. Та ситуация вообще удивляет - в методе только локальные переменные и датасет с другого юнита, для конкретного набора данных обращаюсь первый раз один результат, с теми же данными в последующие разы другой. Метод засунут в датамодуль, который создается динамически, по выходу убивается. Каждый раз все с чистого листа и это долбанное округление.
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 12.02.2015 в 19:25. |
|
12.02.2015, 19:31 | #6 |
Форумчанин
Регистрация: 22.02.2010
Сообщений: 912
|
|
12.02.2015, 19:53 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В районе пятерки значит - отбрасываемый десятичный разряд очень к ней близок. По поводу глючности Round и, соответственно RoundTo да и SimpleRoundTo можно примеры здесь посмотреть
http://www.delphikingdom.com/asp/vie...catalogID=1217
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
12.02.2015, 20:31 | #8 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
Round- уневерсальное округление. Округляет по математическим законам.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
12.02.2015, 20:53 | #9 |
Форумчанин
Регистрация: 05.10.2007
Сообщений: 478
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
округление | govorun1 | Общие вопросы Delphi | 3 | 15.02.2014 18:54 |
Функция FloatToStrF | Анастас | Помощь студентам | 2 | 31.10.2011 17:53 |
округление с++ | kop | Общие вопросы C/C++ | 3 | 14.05.2011 16:01 |
Округление | Madina192 | Microsoft Office Access | 6 | 29.04.2011 12:28 |
ОКРУГЛение | Андрей_Васильевич | Microsoft Office Excel | 5 | 19.10.2009 09:09 |