PHP числовой разделитель, setlocale
Недавно я столкнулся с очень интригующей проблемой. У меня есть следующий код на веб-сайте, чтобы сгенерировать число, состоящее из 10 цифр, за которым следует точка (.), А затем от 2 до 4 цифр. Я также использую функцию gettext, чтобы перевести страницу на 2 других языка
<?php
$lang = "en_UK";
putenv("LC_ALL=$lang");
setlocale(LC_ALL, $lang);
bindtextdomain("messages", "locale");
bind_textdomain_codeset('messages', 'UTF-8');
textdomain("messages");
list($usec, $sec) = explode(" ",microtime());
$my_number = ((float)$usec + (float)$sec + (float)rand(1, 100000000));
?>
<form method ="POST" action="">
<input type="hidden" value="<?php echo $my_number; ?>"/>
<input type="submit"/>
</form>
Все идет нормально. когда $lang
равно en_UK, я получаю то, что мне нужно (1234567891.1234).
Но если $lang
равно it_IT или de_DE, тогда $my_number
изменяет формат на 10 цифр, затем следует COMMA, а затем от 2 до 4 цифр (1234567891,1234).
Кто-нибудь сейчас почему это происходит??? Большое спасибо:)
1 ответ
Решение
В разных странах существуют разные соглашения о том, как писать цифры. setlocale
изменяет соглашения, используемые вашей программой.