浮点数 - 小数分隔符
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:= '.'
我正在尝试写入 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:= '.'