我正在尝试写入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;
答案 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:='。'