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 изменяет соглашения, используемые вашей программой.

Другие вопросы по тегам