Konwersja liczb do ciągów znaków z wykorzystaniem własnego formatowania

0

Powitać ponownie,
Mam serię liczb. Są one różne, w sensie:

  1. Liczby całkowite,
  2. Liczby z jednym miejscem po przecinku,
  3. Liczby z dwoma miejscami po przecinku.

Symbolem dziesiętnym jest przecinek.
Jak je zamienić, aby symbolem dziesiętnym była kropka, oraz zawsze były dwa miejsca po przecinku, tzn. jak jest np. jedno, to uzupełniane jest 0, a jak nie ma wcale, to dodawane są dwa i kropka. Kombinowałem z funkcją Format, ale jakoś nie idzie.

0

A tę serię liczb to w jakiej postaci masz? Jako jeden łańcuch znaków z separatorami, czy jako zbiór ciągów?

1

dla starszego delphi StringReplace(Format('%.2f', [liczba]), DecimalSeparator, ',', [rfReplaceAll]);
dla nowszego delphi StringReplace(Format('%.2f', [liczba]), FormatSettings.DecimalSeparator, ',', [rfReplaceAll]);

3

Do samej konwersji możesz użyć funkcji FloatToStrF oraz nieco podłubać w ustawieniach formatów:

var
  LValue: String;
begin
  FormatSettings.DecimalSeparator := '.';
  LValue := FloatToStrF(3.14159, ffFixed, 0, 2);

W zmiennej LValue wyląduje ciąg 3.14.

Zmiana wartości pola w FormatSettings będzie miala zasięg globalny, dlatego że jest to zmienna globalna (istniejąca też pod nazwą DefaultFormatSettings) i z niej korzysta wiele różnych funkcji konwertujących.

Jeżeli zależy Ci na tym, aby zmiana separatora była lokalna to możesz albo zapamiętać stary separator i po wszystkim go przywrócić, albo też możesz przekopiować dane z globalnego rekordu do pomocniczej zmiennej i w tej zmiennej zmodyfikować znak separatora:

var
  LValue: String;
  LSettings: TFormatSettings;
begin
  LSettings := FormatSettings;
  LSettings.DecimalSeparator := '.';
  LValue := FloatToStrF(3.14159, ffFixed, 0, 2, LSettings);

1 użytkowników online, w tym zalogowanych: 0, gości: 1