在 laravel 中基于印度编号系统格式化货币
Posted
技术标签:
【中文标题】在 laravel 中基于印度编号系统格式化货币【英文标题】:Formatting currency based on Indian numbering system in laravel 【发布时间】:2015-10-08 11:19:17 【问题描述】:我使用了 php 的 NumberFormatter。但我收到的错误是“NumberFormatter not found”。然后我使用了 Money 包,https://packagist.org/packages/money/money,但是不支持 INR(印度货币)。
虽然我不太关心带数字的卢比符号,但至少我需要格式化数字; 例如: 从 7827894.8 到 78,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 中基于印度编号系统格式化货币的主要内容,如果未能解决你的问题,请参考以下文章