Показать сообщение отдельно
Старый 08.10.2004, 20:31     # 4
spleenJack
Member
 
Аватар для spleenJack
 
Регистрация: 14.12.2003
Адрес: Дубна
Сообщения: 201

spleenJack Луч света в тёмном царствеspleenJack Луч света в тёмном царствеspleenJack Луч света в тёмном царствеspleenJack Луч света в тёмном царствеspleenJack Луч света в тёмном царствеspleenJack Луч света в тёмном царстве
придумал вот такой изврат
Код:
function ExpotentialToStr(s: string): string;
var
  PosE, PosDot: integer; {позиции буквы E и точки}
  CountZeroStr: string; {кол-во нулей для добавления (строка)}
  CountZero: integer; {кол-во нулей для добавления (число)}
  MinusCountZero: integer; {число нулей, которое надо убрать}
  ZeroStr: string; {строка с нулями}
  ErrorCode: integer; {код ошибки (для Val)}
begin
  {удаляем пробел}
  if s[1] = ' ' then
    Delete(s, 1, 1);
  PosE := Pos('E', s); {позиция буквы E}
  if PosE > 0 then begin {если она есть}
    PosDot := Pos('.', s); {позиция точки}
    CountZeroStr := Copy(s, PosE + 2, 4); {степень у E - это и есть кол-во нулей}
    Val(CountZeroStr, CountZero, ErrorCode);
    if s[PosE + 1] = '+' then begin {если степень положительная}
      MinusCountZero := PosE - PosDot - 1; {кол-во знаков от точки до E - их кол-во надо убрать из кол-ва нулей, которое мы получили выше}
      CountZero := CountZero - MinusCountZero; {конечное число нулей для добавления}
      Delete(s, PosE, 6); {удаляем E}
      Delete(s, PosDot, 1); {удаляем точку}
      FillChar(ZeroStr, CountZero + 1, '0'); {строка с нулями}
      ZeroStr[0] := Chr(CountZero);
      s := s + ZeroStr; {объединяем число с нулями}
    end
    else begin {если степень отрицательная}
      MinusCountZero := PosDot - 1; {кол-во знаков до точки}
      CountZero := CountZero - MinusCountZero; {конечное число нулей для добавления}
      Delete(s, PosE, 6); {удаляем E}
      while s[Length(s)] = '0' do
        Delete(s, Length(s), 1); {удаляем все нули справа от числа}
      Delete(s, PosDot, 1); {удаляем точку}
      FillChar(ZeroStr, CountZero + 1, '0'); {строка с нулями}
      ZeroStr[0] := Chr(CountZero);
      s := '0.' + ZeroStr + s; {объединяем число и нули}
    end;
  end;
  ExponentialToStr := s;
end;
ничего проще не придумывается )

вроде работает правильно.. НО!! только для чисел у которых степень больше 14 - если меньше она сглюканет.. но я это еще не проверил - если хочешь попробуй - но думаю не сработает
если для малых чисел нужно - могу доработать
spleenJack вне форума