是否有可用的一致全局格式设置变量?

时间:2013-07-03 07:40:38

标签: delphi

我知道有一个全局FormatSettings变量可用,它在启动时使用当前的区域操作系统设置进行初始化。这意味着,当您将字符串转换为数字和签名时,例如,在xml文件中,您与其他PC交换这些文件。可能会发生这样的文件无法加载,因为字符串不能再转换回数字。它取决于DecimaleSeparator

所以我的问题是:是否有另一个globel FormatSettings变量可用,我可以用它来将持久数据存储到文本文件中?

示例:

FloatToStr(Value, PersistentFormatSettings);

3 个答案:

答案 0 :(得分:1)

不,没有这样的变数。不过,欢迎您自己定义一个。在一个单元中声明它,然后在需要与语言环境无关的设置的任何地方使用该单元。

答案 1 :(得分:1)

在现代Delphi版本中,不推荐使用全局FormatSettings变量(主要是因为它们不是线程安全的)。使用格式化变量的每个RTL函数都已重载,以将可选的TFormatSettings记录作为输入。这使您不仅可以在每次使用的基础上使用特定于线程的格式设置,还可以使用自定义格式设置,而不会影响任何其他格式化用途。例如:

var
  Fmt: TFormatSettings;
  S: String;
begin
  Fmt := TFormatSettings.Create; // get default settings
  //
  // or:
  // Fmt := TFormatSettings.Create(SomeLocaleID); // get locale-specific settings
  //
  // or:
  // Fmt := TFormatSettings.Create(SomeLocaleName); // get locale-specific settings
  //

  // customize its fields to use whatever you want...
  Fmt.DecimalSeparator := ...;
  Fmt.ThousandSeparator := ...;

  // now format it...
  S := FloatToStr(Value, Fmt);
end;

答案 2 :(得分:0)

使用 SysUtils 中的 FormatSettings 变量。 因此,您可以节省很多时间(请参见TFormatSettings构造函数),并且不必在每次转换float时都初始化此大记录-无需创建新的TFormatSettings记录。顺便说一句,您可以使用简单的FloatToStr(val)。

FormatSettings不会标记为已弃用,但不是线程安全的。 您可以从任何线程中读取此变量(=您可以从任何并行线程中使用FloatToStr),但是只能从一个线程(例如,更改Core或主Form构造函数中的分隔符)并且在其他线程开始读取它之前写入FormatSettings(=使用FloatToStr)。