|
Вопрос # 1 573/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Нужен ХЕЛП. Необходимо вводить число с запятой(курс валют), к примеру 24.86. Затем округлить его. и работать как с целым числом. Все бы хорошо round можно было бы использовать, но при вводе в edit числа с запятой ступор. Какой компонент лучше использовать для этой цели. Или что вы посоветуете в данном случае. Заранее спасибо.
 |
Вопрос задал: 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 (статус: Посетитель), 11 мая 2008, 13:54 [#1]:
Начал работать с MaskEdit, теперь не могу округлить в большую сторону. Round округляет в меньшую а что округляет в большую?
|
|
Dron (статус: Студент), 11 мая 2008, 13:59 [#2]:
Для округления в большую сторону можно использовать функцию Ceil() из модуля Math.
С уважением.
|
|
Alex-Omsk (статус: Посетитель), 11 мая 2008, 14:12 [#3]:
Я чего то не понимаю он у меня все равно округляет в меньшую
|
|
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 (статус: Студент), 11 мая 2008, 16:14 [#6]:
Цитата:
если число зачанчивается на .5, то округление может быть в обе стороны. А точнее - в сторону чётного числа. по этому
А в хелпе такое написано? Может быть дело всё в том, что вещественные числа, кажущиеся равными, на самом деле могут отличаться в каком-нибудь 10-ом знаке после запятой? Может с этим связан этот глюк? Хотя, в этом случае, наверное, всё бы округлялось всегда одинаково...
С уважением.
|
|
Вадим К (статус: Академик), 11 мая 2008, 19:09 [#7]:
естественно, что в хелпе всё это описано.
просто надо хелпы читать, хотя бы по праздникам.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Alex-Omsk (статус: Посетитель), 12 мая 2008, 07:23 [#8]:
СПАСИБО БОЛЬШОЕ ЗА СОВЕТЫ. Буду пробовать, а хелпы читал, но наверное плохо.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|