在現代的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;
當你將字符串轉換爲數字的JSON,XML等格式,你不應該使用OS用戶設置,但使用自定義格式程序,通過格式規範定義(這可能跟隨美國的傳統,一些未知程度)。 就我個人而言,我傾向於使用古老的'Str'和'Val'程序來做這種轉換。但在此之前,我閱讀了這些程序的規範以及數據格式來匹配它們。 如果你需要像「XMLFormatSettings」或「JSONFormatSetting」這樣的變量,那麼就介紹它們。 * Persistent *在這裏是錯誤的 - 它不是關於設置的持久性。 –
在C#中有可以使用的InvariantCultur對象。如果德爾福也可以提供這樣的事情,那將會很棒。 –
@TLama,如果這是千位分隔符?美國傳統:1,234,567.89;蘇聯傳統:1.234.567,89;現代俄羅斯傳統(因禁止蘇聯內部IT發展而適應美國個人電腦洪水); 1 234 567,89;然後拿手持計算器 - 1'234'567.89;現在...現在我想知道是否有RTL語言編號爲RTL,這將使得它成爲98.765,432,1 ... –