Delphi十进制分隔符问题
我的应用程序在具有区域设置的系统上工作,其中十进制分隔符是逗号。(德尔菲10.1) 我已经为我的应用程序设置了小数点分隔符Delphi十进制分隔符问题,delphi,format,decimal,Delphi,Format,Decimal,我的应用程序在具有区域设置的系统上工作,其中十进制分隔符是逗号。(德尔菲10.1) 我已经为我的应用程序设置了小数点分隔符 Application.UpdateFormatSettings := false; FormatSettings.DecimalSeparator := '.'; Application.UpdateFormatSettings := true; 这对我来说很好 我使用了格式('%6.3f',125.365])函数。 Exe在系统上24*7运行 在初始阶段(
Application.UpdateFormatSettings := false;
FormatSettings.DecimalSeparator := '.';
Application.UpdateFormatSettings := true;
这对我来说很好
我使用了格式('%6.3f',125.365])
函数。
Exe在系统上24*7运行
在初始阶段(如1小时或2小时),format函数正确返回数据,并使用点作为十进制分隔符,但随后会更改为本地设置逗号
说12365
圆点是如何突然变成逗号的 如果你不想让别人弄乱你的东西,就用克拉格枪。
在这种情况下,它是接受FormatSettings记录的Format的重载版本 创建一个单元,如下所示:
unit DecimalPoint;
interface
uses
System.SysUtils;
var fs: TFormatSettings;
implementation
initialization
fs:= FormatSettings;
fs.ThousandSeparator:= ' '; <<-- don't forget
fs.DecimalSeparator:= '.'
end.
Str:= Format('%6.3f', 125.365],fs);
不要依赖全局
格式设置。使用格式的第二个重载
,它允许您指定自己的t格式设置
如果您有较新版本的Delphi,则可以直接使用t FormatSettings.Invariant
:
S := Format('%6.3f', [125.365], TFormatSettings.Invariant)
或者创建新的t格式设置
:
S := Format('%6.3f', [125.365], TFormatSettings.Create('en-US'));
或者,例如,在没有不变量
或创建
方法的版本中,您当然可以“手动”设置值。但是在您自己的格式设置中设置它们,而不是在全局设置中设置它们。获取本地格式设置并更改它
var
fs:TFormatSettings;
begin
fs:=TFormatSettings.Create(GetThreadLocale());
GetLocaleFormatSettings(GetThreadLocale(),fs);
fs.DecimalSeparator:='.';
end
你看过报纸了吗?指定用户更改系统配置时是否自动更新格式设置。我将其保留为False。不要依赖FormatSettings
的全局设置。程序的任何部分都可以更改设置。也不是线程安全的。在传递您自己的FormatSettings
记录的地方,使用重载版本的格式浮动。或者,按照流程让用户以他们期望的形式查看数字。@LURD:谢谢……我会这么做……这只发生在Delphi更高版本中吗?我想是Delphi-7。停止将乐高积木粘在一起!(虽然我知道在Legoland中,它们也会这样做)。const cMyFormatSettings:TFormatSettings=(小数分隔符:'.')代码>更简单。为千位分隔符提供#0,在不需要此类字符时有效。不,“you must”不是一个好的措辞。此外,您的示例毫无意义(创建线程区域设置的新实例,获取默认区域设置,修改它们等等)。[无投票权]我使用了这个,它很有效(在delphi 10.3中)-以前的版本不需要这个-您的示例毫无意义。你可以坚持,但这毫无意义。[我不是在这里投票]为什么不在Delphi 10.3中测试这个问题?OP应该如何处理fs
设置(我知道,但我在你的答案中没有提到这一点)?此外,我想说同样的话是用一种恰当的方式。