Я работаю с Delphi 2009, я задал свой вопрос, но ответы, которые я получил, устарели, поскольку он не распознает StrtoFloat в Delphi2009.
Я спрашиваю, как преобразовать целое число, например, «1900000» в «1,900,000»?
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 долларов.
Разве это не было бы чем-то вроде формата, у delphi должна быть какая-то поддержка для форматирования числа в строку так, как вы хотите, верно? Кроме того, разве новые версии delphi не более согласованы с фреймворком .net?
Вы можете назначить целое число для валюты напрямую путем присвоения, компилятор выполнит преобразование за вас:
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 (если компилятор не делает что-то умное).
В настоящее время я использую это:
function FloatToCurrency(const f: double): string;
begin
Result := FormatFloat('#,###.##;1;0', f);
end;
Это не работает с отрицательными числами, но, поскольку вам нужна валюта, у вас не будет этой проблемы.
Похожие вопросы
Связанные вопросы
Новые вопросы
delphi
Delphi - это язык для быстрой разработки собственных приложений для Windows, macOS, Linux, iOS и Android с использованием Object Pascal. Название относится к языку Delphi, а также к его библиотекам, компилятору и IDE, которые используются для помощи в редактировании и отладке проектов Delphi.