浮点数 - 小数分隔符

时间:2015-07-10 07:20:27

标签: xml delphi delphi-2009

我正在尝试写入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;

2 个答案:

答案 0 :(得分:3)

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

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

然后当您进行转换时,请执行此操作,例如:

str := FloatToStr(Value, fs);

答案 1 :(得分:1)

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

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

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

 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上是usend。 在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:='。'