| 
| 
 | Вопрос # 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]:СПАСИБО БОЛЬШОЕ ЗА СОВЕТЫ. Буду пробовать, а хелпы читал, но наверное плохо. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |