Как отформатировать число в научной нотации

#delphi #pascal #lazarus

#delphi #паскаль #лазарь

Вопрос:

Итак, в основном у меня есть эта функция, которая возвращает: 3.00000000000E000

 function lang():extended;
begin
wynik := 0 ;
   counter := 1;
   temp :=1;
   input := 2;


   for i:= 1 to 4 do
       begin
       for k:= 1 to 4 do
       begin
       if i = k then counter := counter
       else temp := temp * ((input - a[k]) / (a[i] - a[k]));



       end;
       wynik := wynik   temp*f[i];

       temp := 1;
      end;
      Result := wynik;

end;            
  

Но когда я пытаюсь напечатать его на экране приложения с помощью FloatToStr, я получаю только 3.

 procedure TFormCalculator.Button1Click(Sender: TObject);
begin
     Edit1.Text := FloatToStr(lang());
end;
  

Как я могу сохранить длинную версию результата?

Комментарии:

1. Почему вы используете extended? Это часто приводит к снижению производительности.

2. только не на x86. В любом случае, посмотрите на floattostrf()

Ответ №1:

Вы должны понимать, что компьютеры не хранят числа в виде строк символов (текста). В этом случае вы работаете с числами с плавающей запятой. Пожалуйста, прочтите эту статью в Википедии. (Целые числа намного проще.)

Затем, каждый раз, когда число отображается на экране, компьютерная подпрограмма создает строку символов (текст) из этого числа.

Таким образом, у вас всегда есть одно и то же число, но разные системы создают из него разные текстовые представления.

FloatToStr будет использоваться простой формат чисел по умолчанию. Вы хотите использовать определенный формат (называемый «научным» или «экспоненциальным») с 12 цифрами. Итак, вам нужно использовать процедуру преобразования числа с плавающей запятой в строку, которая поддерживает это:

 Format('%.12e', [3.0], TFormatSettings.Invariant)

FormatFloat('0.00000000000E 000', 3.0, TFormatSettings.Invariant)

FloatToStrF(3.0, ffExponent, 12, 3, TFormatSettings.Invariant)
  

Пожалуйста, прочитайте документацию для каждой функции: