在 laravel 中基于印度编号系统格式化货币

Posted

技术标签:

【中文标题】在 laravel 中基于印度编号系统格式化货币【英文标题】:Formatting currency based on Indian numbering system in laravel 【发布时间】:2015-10-08 11:19:17 【问题描述】:

我使用了 phpNumberFormatter。但我收到的错误是“NumberFormatter not found”。然后我使用了 Money 包,https://packagist.org/packages/money/money,但是不支持 INR(印度货币)。

虽然我不太关心带数字的卢比符号,但至少我需要格式化数字; 例如:7827894.878,27,894.80。 我怎样才能实现它?

我无法使用,

NumberFormatter(国际包没有检测到,虽然我从 php.ini 中取消了它的注释) money_format()(我的是windows系统) Money/Money Package(我的问题没有可用的功能)

请帮助我以正确的方式表示金钱(通过使用任何 或使用 自定义函数TIA .

【问题讨论】:

number_format ( 7827894.8 , 2 , "." , "," )查看手册页php.net/manual/en/function.number-format.php @Juliosoares 如果他们按照 OP 的示例格式化数字(前 3 位之后的 2 组数字),那么 number_format 不会这样做。 @Kryten 你是绝对正确的。对不起,我缺乏关注。我以前从未听说过这样的编号系统。 【参考方案1】:

来自我几个月前写的github gists 之一,

<?php
    function IND_money_format($money)

            $decimal = (string)($money - floor($money));
            $money = floor($money);
            $length = strlen($money);
            $m = '';
            $money = strrev($money);
            for($i=0;$i<$length;$i++)
                if(( $i==3 || ($i>3 && ($i-1)%2==0) )&& $i!=$length)
                    $m .=',';
                
                $m .=$money[$i];
            
            $result = strrev($m);
            $decimal = preg_replace("/0\./i", ".", $decimal);
            $decimal = substr($decimal, 0, 3);
            if( $decimal != '0')
            $result = $result.$decimal;
            
            return $result;
        
?>

如何在 laravel 中将其添加为全局辅助函数?

1 - 在 app 目录中为您的辅助函数创建一个 Helpers 目录 `mkdir app/Helpers'。

2 - 下载 Indian_currency_format.php 文件并将其保存到 Helpers 目录。

3 - 在您的 composer.json 中将文件添加到自动加载的“文件”属性中,以便作曲家可以使用 PSR-4 自动加载来加载它 (见https://getcomposer.org/doc/04-schema.md#psr-4),

like so:
        "autoload": 
            "classmap": [
                "database/seeds",
                "database/factories"
             ],
             "psr-4": 
                "App\\": "app/"
             ,
             "files": [
                "app/Helpers/indian_money_format.php"
             ]
        ,

4 - 最后运行composer dump-autoload 刷新自动加载缓存。

查看我在 how to format a number to Indian Rupee format in PHP / Laravel 上的博文,深入了解此功能的实际工作原理。

【讨论】:

【参考方案2】:

如果您不想为此使用任何软件包,但又想以 laravel 方式执行此操作,我建议您执行以下操作。该解决方案混合了纯 PHP。我在 laravel 5 中对此进行了测试,效果很好。

首先通过运行创建HelperServiceProvider:

php artisan make:provider HelperServiceProvider

然后打开config/app.php并注册服务提供者:

'providers' => [

    /* other providers */

    'App\Providers\HelperServiceProvider',

]

现在创建一个文件夹 app\Helpers 并在该文件夹中创建一个文件 moneyformat.php

<?php

/* moneyformat.php */

    function rupee_format($num) 
        $explrestunits = "" ;
        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; // writes the final format where $currency is the currency symbol.
    

现在您可以像这样在刀片文件中显示数字:

 rupee_format($price) 

引用question1、question2

【讨论】:

以上是关于在 laravel 中基于印度编号系统格式化货币的主要内容,如果未能解决你的问题,请参考以下文章

用印度后缀 IOS 格式化货币

谷歌表格中的印度短货币格式

Rails Number 到印度货币格式转换助手

使用 Jquery Validation 验证印度车辆编号的车辆编号

印度尼西亚的常用货币是啥

印度拟禁私人加密货币 推央行数字货币