我的应用程序适用于具有区域设置的系统,其中小数分隔符为逗号。 (Delphi 10.1)
我已将dot设置为我的应用程序的小数点分隔符。
Application.UpdateFormatSettings := false;
FormatSettings.DecimalSeparator := '.';
Application.UpdateFormatSettings := true;
这对我来说很好。
我使用过format('%6.3f', 125.365])
函数。
Exe在系统上打开24 * 7 ..
在初始阶段,如1或2小时格式函数正确返回数据,点为小数点分隔符,但稍后会更改为本地设置逗号
说12,365
。
点如何突然变为逗号?
答案 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'));
或者,例如在没有Invariant
或Create
方法的版本中,您可以“手动”设置值。但是将它们设置在您自己的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