How to display Currency in Indian Numbering Format in PHP

后端 未结 22 1806
一整个雨季
一整个雨季 2020-12-01 06:14

I have a question about formatting the Rupee currency (Indian Rupee - INR).

For example, numbers here are represented as:

1
10
100
1,000
10,000
1,00,00         


        
相关标签:
22条回答
  • 2020-12-01 06:49

    Check this code, it works 100% for Indian Rupees format with decimal format. You can use numbers like :

    123456.789 123.456 123.4 123 and 1,2,3,4,5,6,7,8,9,.222

    function moneyFormatIndia($num){
    
    $explrestunits = "" ;
    $num = preg_replace('/,+/', '', $num);
    $words = explode(".", $num);
    $des = "00";
    if(count($words)<=2){
        $num=$words[0];
        if(count($words)>=2){$des=$words[1];}
        if(strlen($des)<2){$des="$des";}else{$des=substr($des,0,2);}
    }
    if(strlen($num)>3){
        $lastthree = substr($num, strlen($num)-3, strlen($num));
        $restunits = substr($num, 0, strlen($num)-3); // extracts the last three digits
        $restunits = (strlen($restunits)%2 == 1)?"0".$restunits:$restunits; // explodes the remaining digits in 2's formats, adds a zero in the beginning to maintain the 2's grouping.
        $expunit = str_split($restunits, 2);
        for($i=0; $i<sizeof($expunit); $i++){
            // creates each of the 2's group and adds a comma to the end
            if($i==0)
            {
                $explrestunits .= (int)$expunit[$i].","; // if is first value , convert into integer
            }else{
                $explrestunits .= $expunit[$i].",";
            }
        }
        $thecash = $explrestunits.$lastthree;
    } else {
        $thecash = $num;
    }
    return "$thecash.$des"; // writes the final format where $currency is the currency symbol.
    
    }
    
    0 讨论(0)
  • 2020-12-01 06:49

    I think this a quick and simplest solution:-

            function formatToInr($number){
            $number=round($number,2);
            // windows is not supported money_format
        if(setlocale(LC_MONETARY, 'en_IN')){
             return money_format('%!'.$decimal.'n', $number);
             }
         else {
            if(floor($number) == $number) {
                $append='.00';
            }else{
                $append='';
            }
            $number = preg_replace("/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/i", "$1,", $number);
            return $number.$append;
            }
        }
    
    0 讨论(0)
  • 2020-12-01 06:50
    $amount=-3000000000111.11;
    $amount<0?(($sign='-').($amount*=-1)):$sign=''; //Extracting sign from given amount
    $pos=strpos($amount, '.'); //Identifying the decimal point position
    $amt=  substr($amount, $pos-3); // Extracting last 3 digits of integer part along with fractional part
    $amount=  substr($amount,0, $pos-3); //removing the extracted part from amount
    for(;strlen($amount);$amount=substr($amount,0,-2)) // Now loop through each 2 digits of remaining integer part
        $amt=substr ($amount,-2).','.$amt; //forming Indian Currency format by appending (,) for each 2 digits
    echo $sign.$amt; //Appending sign
    
    0 讨论(0)
  • 2020-12-01 06:50

    Use this function:

    function addCommaToRs($amt, &$ret, $dec='', $sign=''){
        if(preg_match("/-/",$amt)){
            $amts=explode('-',$amt);
            $amt=$amts['1'];
            static $sign='-';
        } 
        if(preg_match("/\./",$amt)){
            $amts=explode('.',$amt);
            $amt=$amts['0'];
            $l=strlen($amt);
            static $dec;
            $dec=$amts['1'];
        } else {
            $l=strlen($amt);
        }
        if($l>3){
            if($l%2==0){
                $ret.= substr($amt,0,1);
                $ret.= ",";
                addCommaToRs(substr($amt,1,$l),$ret,$dec);
            } else{
                $ret.=substr($amt,0,2);
                $ret.= ",";     
                addCommaToRs(substr($amt,2,$l),$ret,$dec);
            }
        } else {
            $ret.= $amt;
            if($dec) $ret.=".".$dec;
        }
        return $sign.$ret; 
    }
    

    Call it like this:

    $amt = '';
    echo addCommaToRs(123456789.123,&$amt,0);
    

    This will return 12,34,567.123.

    0 讨论(0)
  • 2020-12-01 06:53
    $num = 1234567890.123;
    
    $num = preg_replace("/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/i", "$1,", $num);
    
    echo $num;
    
    // Input : 1234567890.123
    
    // Output : 1,23,45,67,890.123
    
    
    // Input : -1234567890.123
    
    // Output : -1,23,45,67,890.123
    
    0 讨论(0)
  • 2020-12-01 06:53

    So if I'm reading that right, the Indian Numbering System separates the thousands, then every power of a hundred past that? Hmm...

    Perhaps something like this?

    function indian_number_format($num) {
        $num = "".$num;
        if( strlen($num) < 4) return $num;
        $tail = substr($num,-3);
        $head = substr($num,0,-3);
        $head = preg_replace("/\B(?=(?:\d{2})+(?!\d))/",",",$head);
        return $head.",".$tail;
    }
    
    0 讨论(0)
提交回复
热议问题