Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.10.2008, 18:54
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию Как ограничить количество знаков числа после запятой

Имеется вычисляемой поле Edit. Иногда получается так, что в нем после запятой много цифр. Как ограничить количество цифр после запятой?
Использовал функцию FloatToStrF, но не пойму что значит precision (точность), т.к. если при изменении этого параметра получается разный результат
Ответить с цитированием
  #2  
Старый 01.10.2008, 19:15
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

precision - это общая точность представления числа, зависящая от типа переменной, которая преобразовывается в строку. Как привило, этот параметр устанавливается в 0, если предполагается использовать функцию FloatToStrF для разных типов переменных или по максимальной точности, если предполагается определенный тип значения: 7 или меньше для значений типа Single, 15 для Double, 18 или меньше для типа Extended.
Для определения количества знаков после запятой надо использовать последний параметр Digits в функции FloatToStrF.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #3  
Старый 02.10.2008, 08:02
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию

Цитата:
Использовал функцию FloatToStrF
и что? напиши обработку ответа так и увидишь сколько и что получится: например, FloatToStrF(x,ffFixed,0,2). В ответе будет число, вычислимое формулой х, будет 1 знак до запятой и два числа после нее. посмотри справку, там понятно написано.
Ответить с цитированием
  #4  
Старый 02.10.2008, 21:06
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

чего то не получается, вот код
поле Edit28.Text получается как сумма нескольких полей полей

Edit28.Text:=FloatToStr(a+b+c+d);
Itogo:=StrToFloat(Edit28.Text);
FloatToStrF(Itogo,ffFixed,0,2);

что не так

Последний раз редактировалось Михалыч, 02.10.2008 в 21:16.
Ответить с цитированием
  #5  
Старый 02.10.2008, 21:28
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

А почему все должны гадать что именно не получается (телепаты в отпуске)?
Или утверждение: "поле Edit28.Text получается как сумма нескольких полей полей" - это и есть то что "не получается"? Конкретнее, пожалуйста, о своей проблеме.
В какой строке не получается и как такое "не получается" выглядит?
Воспроизвел эти строки один к одному - все нормально работает.
А почему возвращаемое значение функции FloatToStrF(Itogo,ffFixed,0,2); ничему не присваивается? Так надо?
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #6  
Старый 02.10.2008, 22:16
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

Не получается в том смысле, что после запятой все равно больше двух знаков
Ответить с цитированием
  #7  
Старый 02.10.2008, 23:05
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Лично мне больше нравится функция Format
Код:
Edit1.Text := Format('%1.2f', [a+b+c+d]);
Ответить с цитированием
  #8  
Старый 03.10.2008, 08:27
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Надо сделать так:
Код:
Itogo := a+b+c+d;
Edit28.Text:=FloatToStrF(itogo,ffFixed,0,2);
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #9  
Старый 07.01.2009, 00:31
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

а как сделать что бы в Edit входило определенно кол-во знаков а сколько осталось писалось в lablе
Ответить с цитированием
  #10  
Старый 07.01.2009, 01:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Попродробнее вопрос. С примером того, чего ты хочешь.
Ответить с цитированием
  #11  
Старый 08.01.2009, 01:42
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Попродробнее вопрос. С примером того, чего ты хочешь.

чтобы в Edit вносилось определенное число знаков, допустим 10,а в Lebel показывалось сколько осталось знаков.
Ответить с цитированием
  #12  
Старый 08.01.2009, 02:37
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Переведи с строку.
Скопируй с помощью copy строку длинной [позиция точки]+n, где n -нужное кол-во знаков.
Отрежь уже выведенную часть и посчитай доинну остатка.

Механизм с погрешностью, т.к. точность числа определяется типом переменной, а сама дробь может быть бесконечной.
Ответить с цитированием
  #13  
Старый 17.01.2009, 00:22
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

а можно в коде,если не сложно
ограничения я понемаю можно выставить вот так
Код:
Edit1.MaxLength :=10; //10 знаков
Ответить с цитированием
  #14  
Старый 17.01.2009, 00:52
Xcopy Xcopy вне форума
Прохожий
 
Регистрация: 06.10.2008
Сообщения: 35
Репутация: 10
Счастье ппц

Если я правильно понял то нужно это:
round(num * 100 + 0.5) / 100
Ответить с цитированием
  #15  
Старый 17.01.2009, 21:31
zerg zerg вне форума
Прохожий
 
Регистрация: 23.11.2008
Сообщения: 8
Репутация: 10
По умолчанию

Вариант с переводом в строку более мощный.
Кроме copy может понадобиться еще Pos(substr, str) - поиск подстроки. Это в том случае если надо 10 знаков после запятой.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter