2013-07-03 20 views
4

我知道有一個全局變量FormatSettings,它在啓動時使用當前的區域操作系統設置進行初始化。這意味着,當您將字符串轉換爲數字和簽證時,例如在一個xml文件中,並且與其他PC交換文件。可能會出現這樣的文件無法加載,因爲字符串不能再轉換回數字。它依賴於DecimaleSeparator是否存在一致的全局FormatSettings變量availabe?

所以我的問題是:是否有另一個可用的變量,FormatSettings可用,我可以用它來存儲持久性數據到文本文件?

實施例:

FloatToStr(Value, PersistentFormatSettings); 
+1

當你將字符串轉換爲數字的JSON,XML等格式,你不應該使用OS用戶設置,但使用自定義格式程序,通過格式規範定義(這可能跟隨美國的傳統,一些未知程度)。 就我個人而言,我傾向於使用古老的'Str'和'Val'程序來做這種轉換。但在此之前,我閱讀了這些程序的規範以及數據格式來匹配它們。 如果你需要像「XMLFormatSettings」或「JSONFormatSetting」這樣的變量,那麼就介紹它們。 * Persistent *在這裏是錯誤的 - 它不是關於設置的持久性。 –

+1

在C#中有可以使用的InvariantCultur對象。如果德爾福也可以提供這樣的事情,那將會很棒。 –

+0

@TLama,如果這是千位分隔符?美國傳統:1,234,567.89;蘇聯傳統:1.234.567,89;現代俄羅斯傳統(因禁止蘇聯內部IT發展而適應美國個人電腦洪水); 1 234 567,89;然後拿手持計算器 - 1'234'567.89;現在...現在我想知道是否有RTL語言編號爲RTL,這將使得它成爲98.765,432,1 ... –

回答

2

不,不存在這樣的變量。不過,歡迎您自己定義一個。在單元中聲明它,然後在需要獨立於語言環境的設置的地方使用該單元。

2

在現代的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; 
相關問題