Использование setlocale () не влияет на числовые преобразования PHP

У меня есть следующий скрипт:

<?php $test = "2.5"; echo (float)$test; echo "\n"; $r = setlocale(LC_ALL, "da_DK.UTF8"); setlocale(LC_ALL, NULL); print_r(localeconv()); echo "\n"; echo (float)$test; echo "\n"; echo (float)"2,5"; echo "\n"; ?> 

Что генерирует следующий вывод:

 2.5 Array ( [decimal_point] => , [thousands_sep] => . [int_curr_symbol] => DKK [currency_symbol] => kr [mon_decimal_point] => , [mon_thousands_sep] => . [positive_sign] => [negative_sign] => - [int_frac_digits] => 2 [frac_digits] => 2 [p_cs_precedes] => 1 [p_sep_by_space] => 2 [n_cs_precedes] => 1 [n_sep_by_space] => 2 [p_sign_posn] => 4 [n_sign_posn] => 4 [grouping] => Array ( [0] => 3 [1] => 3 ) [mon_grouping] => Array ( [0] => 3 [1] => 3 ) ) 2,5 2 

Самая последняя строка, которая читает 2 – я бы ожидал, что читать 2,5 – и, насколько я могу видеть в документации PHP, это должно быть.
Если второй вызов setlocale опущен, вывод localeconv() не согласуется с датской локалью – по причинам, которые мне неясны.

(float)"2,5" равно 2 (обратите внимание на запятую), тогда как (float)"2.5" равно 2,5. Причина может быть прочитана в руководстве:

Если строка не содержит символов «.», «E» или «E», а числовое значение вписывается в ограничения типа целочисленного типа (как определено PHP_INT_MAX), строка будет оцениваться как целое число. Во всех остальных случаях он будет оцениваться как плавающий.

setlocale() не влияет на тип литья.