Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi十进制分隔符问题_Delphi_Format_Decimal - Fatal编程技术网

Delphi十进制分隔符问题

Delphi十进制分隔符问题,delphi,format,decimal,Delphi,Format,Decimal,我的应用程序在具有区域设置的系统上工作,其中十进制分隔符是逗号。(德尔菲10.1) 我已经为我的应用程序设置了小数点分隔符 Application.UpdateFormatSettings := false; FormatSettings.DecimalSeparator := '.'; Application.UpdateFormatSettings := true; 这对我来说很好 我使用了格式('%6.3f',125.365])函数。 Exe在系统上24*7运行 在初始阶段(

我的应用程序在具有区域设置的系统上工作,其中十进制分隔符是逗号。(德尔菲10.1)

我已经为我的应用程序设置了小数点分隔符

  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
设置(我知道,但我在你的答案中没有提到这一点)?此外,我想说同样的话是用一种恰当的方式。