Ещё с нулевых у меня был код на VC++, который форматировал Double в удобочитаемый вид. Сначала он делает так:

sprintf(TXT, "%lf", dblByaka);

На выходе получается что-то в духе «123.456789», а потом TXT пизается в GetNumberFormat(), который уже форматирует этот текст в то, что задано в региональных настройках (или что укажешь в специальной структуре).
Недавно вдруг обнаружилось, что в Windows 2000 и ниже этот код возвращает пустую строку при очень маленьких значениях dblByaka. Начала разбираться и выяснила, что sprintf() выдаёт мне «0,000000123» вместо «0.000000123». Тоесть именно в этом случае он ставит запятую вместо точки, как это происходит во всех остальных случаях. А вот в Windows XP и выше такого не наблюдается. Мистика.