Определение кроссплатформенной функции money_format (Linux и Windows) - PullRequest
6 голосов
/ 02 апреля 2012

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

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

Ответы [ 2 ]

11 голосов
/ 06 апреля 2012

Функция 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 без расширения является довольно глупым. Я не понимаю, почему вы хотели бы создать подобные несоответствия между различными операционными системами в языке программирования

0 голосов
/ 01 февраля 2019

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;
    }
?>
...