Я работаю с Delphi 2009, я задал свой вопрос, но ответы, которые я получил, устарели, поскольку он не распознает StrtoFloat в Delphi2009.

Я спрашиваю, как преобразовать целое число, например, «1900000» в «1,900,000»?

4
Ivan Prodanov 8 Авг 2009 в 00:12

4 ответа

Лучший ответ

Вы также можете использовать команду форматирования. Поскольку формат ожидает действительное число, добавление 0,0 к целому числу фактически превращает его в расширенный тип.

Result := Format('%.0m',[intValue + 0.0]));

Это правильно обрабатывает отрицательные числа и добавляет символ валюты для локали пользователя. Если символ валюты не нужен, установите CurrencyString: = ''; перед вызовом, а потом восстановить.

SavedCurrency := CurrencyString;
try
  CurrencyString := '';
  Result := Format('%.0m',[intValue + 0.0]));
finally
  CurrencyString := SavedCurrency;
end;

Чтобы использовать запятые, просто установите ThousandSeparator: = ',';

CurrencyString := '!';
ThousandSeparator := '*';
Result := Format('%.0m',[-1900000.0]);  

// Returns (!1*900*000) in my locale.

«Период» в маске определяет, как будет отображаться дробная часть поплавка. Поскольку после этого я передал 0, он сообщает команде форматирования не включать дробные части. команда форматирования Format ('%. 3m', [4.0]) вернет 4000 долларов.

8
skamradt 7 Авг 2009 в 20:48

Разве это не было бы чем-то вроде формата, у delphi должна быть какая-то поддержка для форматирования числа в строку так, как вы хотите, верно? Кроме того, разве новые версии delphi не более согласованы с фреймворком .net?

0
mxrss 7 Авг 2009 в 20:16

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

var
  Int : Integer;
  Cur : Currency;
begin
  Int := 1900000;
  Cur := Int;
  ShowMessage(CurrToStr(Cur)); // 1900000
  ShowMessage(Format('%m', [Cur]); // 1,900,000.00 in US/UK/NZ/AU etc, "1 900 000,00" in Spain etc.
  ShowMessage(Format('%.0m', [Cur]); // 1,900,000 in US/UK/NZ/AU etc, "1 900 000" in Spain etc.
end;

Если вы хотите, чтобы запятые использовали испанские региональные настройки, установите ThousandSeparator: = ','; или используйте расширенную версию CurrToStrF (amount, ffCurrency, decimals, FormatSettings)).

Версия с FormatSettings также является потокобезопасной.

Примечание: вы не можете напрямую назначить Currency для Integer, вам нужно будет использовать Int: = Trunc (Cur), но это неэффективно, поскольку сначала оно преобразуется в float (если компилятор не делает что-то умное).

1
Gerry Coll 8 Авг 2009 в 06:09

В настоящее время я использую это:

function FloatToCurrency(const f: double): string;
begin
  Result := FormatFloat('#,###.##;1;0', f);
end;

Это не работает с отрицательными числами, но, поскольку вам нужна валюта, у вас не будет этой проблемы.

1
zz1433 7 Авг 2009 в 20:16