我知道有一个全局FormatSettings
变量可用,它在启动时使用当前的区域操作系统设置进行初始化。这意味着,当您将字符串转换为数字和签名时,例如,在xml文件中,您与其他PC交换这些文件。可能会发生这样的文件无法加载,因为字符串不能再转换回数字。它取决于DecimaleSeparator
。
所以我的问题是:是否有另一个globel FormatSettings
变量可用,我可以用它来将持久数据存储到文本文件中?
示例:
FloatToStr(Value, PersistentFormatSettings);
答案 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)。