Delphi小数分隔符问题

时间:2017-05-18 05:28:56

标签: delphi format decimal

我的应用程序适用于具有区域设置的系统,其中小数分隔符为逗号。 (Delphi 10.1)

我已将dot设置为我的应用程序的小数点分隔符。

  Application.UpdateFormatSettings := false;
  FormatSettings.DecimalSeparator := '.';
  Application.UpdateFormatSettings := true;

这对我来说很好。

我使用过format('%6.3f', 125.365])函数。 Exe在系统上打开24 * 7 ..

在初始阶段,如1或2小时格式函数正确返回数据,点为小数点分隔符,但稍后会更改为本地设置逗号

12,365

点如何突然变为逗号?

3 个答案:

答案 0 :(得分:3)

不要依赖全球FormatSettings。使用Format的第二个重载,您可以指定自己的TFormatSettings

如果你有更新版本的Delphi,你可以直接使用TFormatSettings.Invariant

S := Format('%6.3f', [125.365], TFormatSettings.Invariant)

或者您创建了一个新的TFormatSettings

S := Format('%6.3f', [125.365], TFormatSettings.Create('en-US'));

或者,例如在没有InvariantCreate方法的版本中,您可以“手动”设置值。但是将它们设置在您自己的FormatSettings中,而不是全局的。

答案 1 :(得分:0)

如果你不想让人们弄乱你的东西,请使用kragle 在这种情况下,它是Format的重载版本,它接受FormatSettings记录。

创建一个像这样的单位:

unit DecimalPoint;

interface

uses
  System.SysUtils;

var fs: TFormatSettings;

implementation
initialization
  fs:= FormatSettings;
  fs.ThousandSeparator:= ' ';  <<-- don't forget
  fs.DecimalSeparator:= '.'
end.

并将此单位添加到uses所需的位置。

现在使用它:

Str:= Format('%6.3f', 125.365],fs);

答案 2 :(得分:0)

获取本地格式设置并进行更改。

var
  fs:TFormatSettings;
begin
    fs:=TFormatSettings.Create(GetThreadLocale());
    GetLocaleFormatSettings(GetThreadLocale(),fs);
    fs.DecimalSeparator:='.';
end