Thread-Safeness of FloatToStr / DateToStr-Collection of common programming errors

Even the global settings can change when Application.UpdateFormatSettings (Delphi 7, don’t know about Delphi XE) is True. When a user changes the Regional and Language options of Windows, this will be reflected in your application. You can circumvent this by setting UpdateFormatSettings to False, but even then you can’t be sure, maybe there is some third party library you use that changes it.

I had some problems with our own application: Nowhere in our application the global formatsettings were changed, but still there was information loss because a float was converted to a string and when the string was converted back to float, the formatsettings were magically changed. (So you had this: 1.2 -> convert to string -> ‘1.2’ -> black magic that changed formatsettings.decimalseparator -> convert to float -> 12).

My suggestion: only use the not thread-safe version for UI purposes so the user sees dates and floats the way he likes them to see, for everything else, use the thread-safe version. Conversions inside your application will then be consistent and don’t give surprises.