![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 знаков после запятой. |