Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2010, 12:59   #1
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию Группировка цифр по разрядам

Здравствуйте! Помогите мне с группировкой цифр по разрядам точно также , как и в калькуляторе windows.
Ilya_L вне форума Ответить с цитированием
Старый 20.07.2010, 13:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то типа
Код:
var i:integer;s:string;
begin
 i:=123456;
 str(i,s);
 i:=(length(s) div 3);
 while i>1 do begin  insert(',',s,i-3);dec(i,3); end;
 write(s);
 readln;
end.
Не проверял
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2010, 15:34   #3
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

А я в своей программе вот так делал группировку разрядов
Код:
  Idx:=Length(Number);
  while Idx>2 do
    begin
      Dec(Idx,2);
      Insert(' ',Number,Idx);
      Dec(Idx)
    end;
Проверено, работает...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 20.07.2010 в 15:37.
Grag вне форума Ответить с цитированием
Старый 20.07.2010, 15:50   #4
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
А я в своей программе вот так делал группировку разрядов
Код:
  Idx:=Length(Number);
  while Idx>2 do
    begin
      Dec(Idx,2);
      Insert(' ',Number,Idx);
      Dec(Idx)
    end;
Проверено, работает...
Да, действительно работает...Спасибо!
Ilya_L вне форума Ответить с цитированием
Старый 28.07.2010, 02:37   #5
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

А если число дробное и нужно начать группировку от запятой, а не с конца числа?
Ilya_L вне форума Ответить с цитированием
Старый 28.07.2010, 07:25   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а вы скажите, число знаков после запятой фиксированное или нет?

А вообще так же: переводите число в строку, и добавляйте в начало нужное число пробелов.

p.s. если не разберётесь - помогу. только ответьте на вопрос...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.07.2010, 07:27   #7
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Вообще нет, не фиксированное количество...
Ilya_L вне форума Ответить с цитированием
Старый 28.07.2010, 09:38   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так не бывает.. я уж не говорю, что банально ограничение имеет машинное представление вещественного числа (зависит от используемого типа данных, компилятора, ОС и т.д.)
Но Вы собираетесь сколько знаков после запятой выводить? Три? Пять? Десять? Пятнадцать?!
вот, поясню:
Код:
программа:
var r : double;
  s : string;
begin
  r := 100.0 / 3.0;
  str(r:1:16, s);
  WriteLn(s);
end.
выдаст:
33.3333333333333357
Вам столько знаков и надо, сколько может хранить вещественное число?


т.е.
1) определитесь сколько знаков выводить после запятой.
2) если хотите, незначащие нули после запятой можно отбрасывать
только решите, число 2.00000 как должно отображаться?
(варианты:
2
2.
2.0
2.000 000 000
или как??? )

как только ответите на вышеизложенное - так я Вам набросаю кодик.
(подсказка. достаточно найти через Pos('.',s) позицию десятичной точки и дальше уже просто...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.07.2010, 09:41   #9
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

например, вот так: 1 234 567,78901234 и после запятой 10 цифр только не больше
Ilya_L вне форума Ответить с цитированием
Старый 28.07.2010, 09:57   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пробуйте:
Код:
var r : extended;
  Number : string;
  Idx : integer;

begin
  r := 1000000000.0 / 3.0;
  str(r:1:16, Number);

  if Pos('.', Number)>1 then
    Idx := Pos('.', Number)-1
  else
    Idx:=Length(Number);
  while Idx>2 do
    begin
      Dec(Idx,2);
      Insert(' ',Number,Idx);
      Dec(Idx)
    end;
  WriteLn(Number);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая группировка anester Microsoft Office Excel 0 08.06.2010 14:07
Группировка Pretorianec79 Microsoft Office Excel 2 19.01.2010 14:36
Натуральное число, в записи которого п цифр, называется числом Армстронга, если сумма его цифр, возведенн OTLi4HO Общие вопросы C/C++ 6 14.01.2009 19:48
группировка Мингиян Microsoft Office Excel 2 23.04.2008 23:43
Группировка SveSve Microsoft Office Excel 3 21.03.2008 11:50