Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 573

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Нужен ХЕЛП. Необходимо вводить число с запятой(курс валют), к примеру 24.86. Затем округлить его. и работать как с целым числом. Все бы хорошо round можно было бы использовать, но при вводе в edit числа с запятой ступор. Какой компонент лучше использовать для этой цели. Или что вы посоветуете в данном случае. Заранее спасибо.

Alex-Omsk Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Alex-Omsk (статус: Посетитель)
Вопрос отправлен: 11 мая 2008, 13:10
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Alex-Omsk!
Из вопроса не совсем понятно, в чём именно заключается ступор, но скорее всего проблема в знаке-разделителе дробной части? Решается проблема очень просто - при запуске программы (например, в Form OnCreate) пишем следующее:

DecimalSeparator:='.';
Всё, теперь в дробных числах будет использоваться точка - в Edit, соответственно, только точку и следует оставить.
P.S. Для ввода удобно использовать TMaskEdit со страницы Additional.

Ответ отправил: Dron (статус: Студент)
Время отправки: 11 мая 2008, 13:17
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 12 мая 2008, 07:23; участников в обсуждении: 3.
Alex-Omsk

Alex-Omsk (статус: Посетитель), 11 мая 2008, 13:54 [#1]:

Начал работать с MaskEdit, теперь не могу округлить в большую сторону. Round округляет в меньшую а что округляет в большую?
Dron

Dron (статус: Студент), 11 мая 2008, 13:59 [#2]:

Для округления в большую сторону можно использовать функцию Ceil() из модуля Math.
С уважением.
Alex-Omsk

Alex-Omsk (статус: Посетитель), 11 мая 2008, 14:12 [#3]:

Я чего то не понимаю он у меня все равно округляет в меньшую
Dron

Dron (статус: Студент), 11 мая 2008, 14:17 [#4]:

Значит что-то не так делаете. Приведите фрагмент кода.
Кстати, Round() округляет не в меньшую, а в ту, в которую положено :-)
С уважением.
Вадим К

Вадим К (статус: Академик), 11 мая 2008, 16:08 [#5]:

to Dron
вообще то round округляет очень странно:)
если число зачанчивается на .5, то округление может быть в обе стороны. А точнее - в сторону чётного числа. по этому
round(3.5) = 4 (Мы так и ожидали)
round(2.5) = 2 (упс!)
Это сделано специально с целью минимизации ошибок.
Но у бухгалтеров (вы же о денежных величинах говорите) другие понятия при округлении. Но для них в делфи тоже есть хорошие функции. Подключаем модуль Math и теперь нам доступна функция SimpleRoundTo.
её сигнатура такая
function SimpleRoundTo(const AValue: Double; const ADigit: TRoundToRange = -2): Double;
AValue - собственно что мы округляем
ADigit - до какого знака.
если равно 0 - значит до целой части.
если равно 3 - значит до тысяч (то есть 1234 -> 1000)
если равно -2 (по умолчанию) то до сотых, удобно для денежных расчётов (1234.32423 = 1234.32)
Галочка "подтверждения прочтения" - вселенское зло.
Dron

Dron (статус: Студент), 11 мая 2008, 16:14 [#6]:

Цитата:

если число зачанчивается на .5, то округление может быть в обе стороны. А точнее - в сторону чётного числа. по этому

А в хелпе такое написано? :-) Может быть дело всё в том, что вещественные числа, кажущиеся равными, на самом деле могут отличаться в каком-нибудь 10-ом знаке после запятой? Может с этим связан этот глюк? Хотя, в этом случае, наверное, всё бы округлялось всегда одинаково...
С уважением.
Вадим К

Вадим К (статус: Академик), 11 мая 2008, 19:09 [#7]:

естественно, что в хелпе всё это описано.
просто надо хелпы читать, хотя бы по праздникам.
Галочка "подтверждения прочтения" - вселенское зло.
Alex-Omsk

Alex-Omsk (статус: Посетитель), 12 мая 2008, 07:23 [#8]:

СПАСИБО БОЛЬШОЕ ЗА СОВЕТЫ. Буду пробовать, а хелпы читал, но наверное плохо.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.02 сек.