Определение кроссплатформенной функции money_format (Linux и Windows)

Я читал, что money_format недоступен в Windows и в некоторых дистрибутивах Linux (например, в вариантах BSD 4.11). Но я хочу написать кроссплатформенную библиотеку, используя обычную функцию, если она доступна, и используя этот обходной путь, если нет, поэтому моя библиотека сможет работать на любом веб-сервере на основе PHP.

Есть ли какое-нибудь простое решение, чтобы проверить, доступна ли встроенная функция, и если нет, включить решение сверху?


person Karol    schedule 02.04.2012    source источник
comment
У вас есть готовый код, в чем вопрос?   -  person kirilloid    schedule 02.04.2012
comment
Как узнать, поддерживает ли платформа встроенную функцию? Я не хочу использовать пользовательский, когда доступен обычный...   -  person Karol    schedule 02.04.2012
comment
Возможный дубликат Альтернатива функции money_format() в PHP на Платформа Windows   -  person Yuri Tkachenko    schedule 13.12.2015


Ответы (2)


Функция money_format() определена только в том случае, если в системе есть возможности strfmon. Например, в Windows это не так, поэтому money_format() в Windows не определен.

Таким образом, вы можете использовать этот php-код:

setlocale(LC_ALL, ''); // Locale will be different on each system.
$amount = 1000000.97;
$locale = localeconv();
echo $locale['currency_symbol'], number_format($amount, 2, $locale['decimal_point'], $locale['thousands_sep']);

Благодаря этому вы можете писать код, который действительно переносим, ​​вместо того, чтобы полагаться на функции операционной системы. Наличие функции money_format в PHP, не являющейся расширением, довольно глупо. Я не понимаю, почему вы хотите создавать такие несоответствия между различными операционными системами в языке программирования.

person Somnath Muluk    schedule 06.04.2012
comment
PHP 5.5.9, Windows 8.1 x64 эта функция ничего не делает с $amount независимо от локали. - person TheFrost; 23.03.2014
comment
И где он учитывает отрицательные числа? - person blackmambo; 05.06.2014
comment
Не считал валюту в отрицательном формате :) @blackmambo - person Somnath Muluk; 06.06.2014

money_format() не работает на компьютере с Windows. Итак, вот ваше решение для формата индийской валюты:

<?php
    function inr_money_format($number){        
        $decimal = (string)($number - floor($number));
        $money = floor($number);
        $length = strlen($money);
        $delimiter = '';
        $money = strrev($money);

        for($i=0;$i<$length;$i++){
            if(( $i==3 || ($i>3 && ($i-1)%2==0) )&& $i!=$length){
                $delimiter .=',';
            }
            $delimiter .=$money[$i];
        }

        $result = strrev($delimiter);
        $decimal = preg_replace("/0\./i", ".", $decimal);
        $decimal = substr($decimal, 0, 3);

        if( $decimal != '0'){
            $result = $result.$decimal;
        }

        return $result;
    }
?>
person Abhishek Sharma    schedule 01.02.2019