|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как ограничить количество знаков числа после запятой
Имеется вычисляемой поле Edit. Иногда получается так, что в нем после запятой много цифр. Как ограничить количество цифр после запятой?
Использовал функцию FloatToStrF, но не пойму что значит precision (точность), т.к. если при изменении этого параметра получается разный результат |
#2
|
|||
|
|||
precision - это общая точность представления числа, зависящая от типа переменной, которая преобразовывается в строку. Как привило, этот параметр устанавливается в 0, если предполагается использовать функцию FloatToStrF для разных типов переменных или по максимальной точности, если предполагается определенный тип значения: 7 или меньше для значений типа Single, 15 для Double, 18 или меньше для типа Extended.
Для определения количества знаков после запятой надо использовать последний параметр Digits в функции FloatToStrF. Не забывайте делать резервные копии |
#3
|
||||
|
||||
Цитата:
|
#4
|
|||
|
|||
чего то не получается, вот код
поле Edit28.Text получается как сумма нескольких полей полей Edit28.Text:=FloatToStr(a+b+c+d); Itogo:=StrToFloat(Edit28.Text); FloatToStrF(Itogo,ffFixed,0,2); что не так Последний раз редактировалось Михалыч, 02.10.2008 в 21:16. |
#5
|
|||
|
|||
А почему все должны гадать что именно не получается (телепаты в отпуске)?
Или утверждение: "поле Edit28.Text получается как сумма нескольких полей полей" - это и есть то что "не получается"? Конкретнее, пожалуйста, о своей проблеме. В какой строке не получается и как такое "не получается" выглядит? Воспроизвел эти строки один к одному - все нормально работает. А почему возвращаемое значение функции FloatToStrF(Itogo,ffFixed,0,2); ничему не присваивается? Так надо? Не забывайте делать резервные копии |
#6
|
|||
|
|||
Не получается в том смысле, что после запятой все равно больше двух знаков
|
#7
|
|||
|
|||
Лично мне больше нравится функция Format
Код:
Edit1.Text := Format('%1.2f', [a+b+c+d]); |
#8
|
|||
|
|||
Надо сделать так:
Код:
Itogo := a+b+c+d; Edit28.Text:=FloatToStrF(itogo,ffFixed,0,2); Не забывайте делать резервные копии |
#9
|
|||
|
|||
а как сделать что бы в Edit входило определенно кол-во знаков а сколько осталось писалось в lablе
|
#10
|
|||
|
|||
Попродробнее вопрос. С примером того, чего ты хочешь.
|
#11
|
|||
|
|||
Цитата:
чтобы в Edit вносилось определенное число знаков, допустим 10,а в Lebel показывалось сколько осталось знаков. |
#12
|
|||
|
|||
Переведи с строку.
Скопируй с помощью copy строку длинной [позиция точки]+n, где n -нужное кол-во знаков. Отрежь уже выведенную часть и посчитай доинну остатка. Механизм с погрешностью, т.к. точность числа определяется типом переменной, а сама дробь может быть бесконечной. |
#13
|
|||
|
|||
а можно в коде,если не сложно
ограничения я понемаю можно выставить вот так Код:
Edit1.MaxLength :=10; //10 знаков |
#14
|
|||
|
|||
ппц
Если я правильно понял то нужно это:
round(num * 100 + 0.5) / 100 |
#15
|
|||
|
|||
Вариант с переводом в строку более мощный.
Кроме copy может понадобиться еще Pos(substr, str) - поиск подстроки. Это в том случае если надо 10 знаков после запятой. |