Десятичная запятая
Затронули тут в одном из айтишных чатов тему десятичной запятой — я считаю, что в русском тексте должна использоваться десятичная запятая, хотя и понимаю, что программистам привычнее точка, так как во всех языках программирования используется именно она.
На этом месте я вдруг задумался — видел ли я хоть раз язык, где используется десятичная запятая?
Так и не вспомнил, зато на память пришёл забавный баг, который был
<?php
var_dump('0,4' + '0,7');
setlocale(LC_ALL, 'ru_RU.koi8r');
var_dump('0,4' + '0,7');Как можно убедиться онлайн, результат будет следующим:
int(0)
float(1,1)Работает в версиях 4.0—4.2, в 4.3 уже не повторяется. Я не помню каким образом на него наткнулся, но чувство недоумения от этого эффекта до сих пор живо в моей памяти.
Комментарии 2
Когда моя коллега впервые наткнулась на эту ошибку у меня ушло минут 40 для того, чтобы осознать, что дело не в кодировке и не в невидимых символах в окрестности точек, а именно в локали.
Ещё недавно наткнулся на то, что при установленной русской локали вывод вещественных чисел в C++ двумя разными способами дает разные результаты.
float f=3.14;
// Укажем, что мы хотим форматировать числа, даты, валюты и пр.
// по правилам русского языка
setlocale(LC_ALL, «Russian»);
// libc по умолчанию использует пользовательские настройки
printf(«%f\n», f); // 3,14
// Стандартные потоки по умолчанию используют локаль POSIX
std::cout