浮点数 - 小数分隔符

Floating point numbers - Decimal Separator

我正在尝试写入 xml 文件,但我在处理浮点数时遇到困难,因为它们使用逗号 (,) 作为小数点分隔符,即使我的区域设置设置为点(.) 为小数分隔符。我在 Windows Server 2012 中遇到这个问题,但在 Windows XP 中我没有遇到这个问题。

 GetLocaleFormatSettings(GetThreadLocale, LocalFormatSettings);
   LocalFormatSettings.DecimalSeparator := '.';

   SHElem := xml.Root.Items.Add('SalesHeader');
   with SHElem do begin
    Items.Add('STORENUMBER', ssCurrentStoreNumber);
      case VarType(Dataset.FieldByName('Amounts').asFloat) of
      varCurrency : Items.Add('Amounts', FloatToStr(Dataset.FieldByName('Amount').asFloat,LocalFormatSettings));
      else          
      Items.Add('Fields', Dataset.FieldByName('Fields').AsString);
      end
   end;

从浮点数转换为字符串时使用格式设置对象。例如:

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

然后在转换的时候,这样操作,比如:

str := FloatToStr(Value, fs);

首先,您必须将项目文件 UpdateFormatSettings 属性 设置为 false,以防止 SO 或其他应用程序(如 ms Excel 等)进行所有更改。

{$R *.res}
begin
  Application.Initialize;
  Application.UpdateFormatSettings:=False;
  ......
  Application.Run;
end.

之后,您必须将以下代码放入您创建的第一个表单中。

 FormatSettings.decimalseparator:='.';

 // you can find other interestin settings like this:
 FormatSettings.TimeSeparator:=':';
 FormatSettings.ShortDateFormat:='dd/MM/yyyy';
 FormatSettings.ShortTimeFormat:='hh:mm:ss';
 FormatSettings.LongTimeFormat:='hh:mm:ss';

以上代码用于XE7。 在 Delphi 6/7 中,您必须以这种方式更改代码:

  //this one is the same
  Application.UpdateFormatSettings := false;

区域设置可以这样写:

decimalseparator:='.';
TimeSeparator:=':';
ShortDateFormat:='dd/MM/yyyy';
ShortTimeFormat:='hh:mm:ss';
LongTimeFormat:='hh:mm:ss';

在 Delphi 2009 中,您可以使用全局变量 DecimalSeparator(在 SysUtils 单元中声明),例如DecimalSeparator:= '.'