Php 是否将长数字缩短为K/M/B?
我在谷歌上搜索了很多,但根据我的查询,我找不到任何有用的函数 我想要的是:Php 是否将长数字缩短为K/M/B?,php,function,helper,Php,Function,Helper,我在谷歌上搜索了很多,但根据我的查询,我找不到任何有用的函数 我想要的是: 100 -> 100 1000 -> 1,000 142840 -> 142,840 但是 如果可能的话,我非常感谢任何自定义函数动态选择限制 谢谢 使用数字格式(): if($nB',//十亿 功率(1000,4)=>‘T’,//万亿 功率(1000,5)=>‘Qa’,//万亿 战力(1000,6)=>‘气’,//五百万 ); } //循环遍历每个$除数并找到 //匹配的最低金额 forea
100 -> 100
1000 -> 1,000
142840 -> 142,840
但是
如果可能的话,我非常感谢任何自定义函数动态选择限制
谢谢 使用数字格式()
:
if($n<1000000){
//少于一百万的
$n\u格式=数字\u格式($n);
}否则,如果($n<100000000){
//任何少于十亿的东西
$n_格式=数字_格式($n/1000000,3)。'M';
}否则{
//至少10亿
$n_格式=数字_格式($n/100000000,3)。'B';
}
如果可能的话,我非常感谢任何自定义函数动态选择限制
如果“limit”指的是小数位数(精度),那么很简单:
function custom_number_format($n, $precision = 3) {
if ($n < 1000000) {
// Anything less than a million
$n_format = number_format($n);
} else if ($n < 1000000000) {
// Anything less than a billion
$n_format = number_format($n / 1000000, $precision) . 'M';
} else {
// At least a billion
$n_format = number_format($n / 1000000000, $precision) . 'B';
}
return $n_format;
}
函数自定义编号格式($n,$precision=3){
如果($n<1000000){
//少于一百万的
$n\u格式=数字\u格式($n);
}否则,如果($n<100000000){
//任何少于十亿的东西
$n_格式=数字_格式($n/1000000,$precision)。'M';
}否则{
//至少10亿
$n_格式=数字_格式($n/100000000,$precision)。'B';
}
返回$n_格式;
}
CakePHP有一个带有方法的。你应该能够自己摸索并想出一些办法。在它里面,$this->precision
基本上类似于number\u format()
,而\u n
是一个单数或复数函数。我接受了提供的答案,并考虑到配置的方便,对它进行了一些调整
// Shortens a number and attaches K, M, B, etc. accordingly
function number_shorten($number, $precision = 3, $divisors = null) {
// Setup default $divisors if not provided
if (!isset($divisors)) {
$divisors = array(
pow(1000, 0) => '', // 1000^0 == 1
pow(1000, 1) => 'K', // Thousand
pow(1000, 2) => 'M', // Million
pow(1000, 3) => 'B', // Billion
pow(1000, 4) => 'T', // Trillion
pow(1000, 5) => 'Qa', // Quadrillion
pow(1000, 6) => 'Qi', // Quintillion
);
}
// Loop through each $divisor and find the
// lowest amount that matches
foreach ($divisors as $divisor => $shorthand) {
if (abs($number) < ($divisor * 1000)) {
// We found a match!
break;
}
}
// We found our match, or there were no matches.
// Either way, use the last defined value for $divisor.
return number_format($number / $divisor, $precision) . $shorthand;
}
//缩短数字并相应地附加K、M、B等
函数编号\u缩短($number,$precision=3,$divisions=null){
//设置默认的$除数(如果未提供)
if(!isset($除数)){
$除数=数组(
功率(1000,0)=>1,//1000^0==1
功率(1000,1)=>K',//千
功率(1000,2)=>M',//百万
功率(1000,3)=>B',//十亿
功率(1000,4)=>‘T’,//万亿
功率(1000,5)=>‘Qa’,//万亿
战力(1000,6)=>‘气’,//五百万
);
}
//循环遍历每个$除数并找到
//匹配的最低金额
foreach($除数为$除数=>$速记){
if(绝对值($数字)<($除数*1000)){
//我们找到了一根火柴!
打破
}
}
//我们找到了匹配项,或者没有匹配项。
//无论哪种方式,都使用上次定义的$divisor值。
返回数字格式($number/$divisior,$precision)。$shorthand;
}
你可以试试这个
function number_formation($number, $precision = 3) {
if ($number < 1000000) {
$formatted_number = number_format($number); /* less than a million */
} else if ($number < 1000000000) {
$formatted_number = number_format($number / 1000000, $precision) . 'M'; /* billion */
} else {
$formatted_number = number_format($number / 1000000000, $precision) . 'B'; /* for billion */
}
return $formatted_number;
}
函数编号\u格式($number,$precision=3){
如果($number<1000000){
$formatted_number=number_format($number);/*少于一百万*/
}否则,如果($number<100000000){
$formatted_number=number_format($number/1000000,$precision)。'M';/*十亿*/
}否则{
$formatted_number=number_格式($number/100000000,$precision)。'B';/*表示十亿*/
}
返回$U编号;
}
试试这个
function custom_number_format($n, $precision = 1) {
if ($n < 900) {
// Default
$n_format = number_format($n);
} else if ($n < 900000) {
// Thausand
$n_format = number_format($n / 1000, $precision). 'K';
} else if ($n < 900000000) {
// Million
$n_format = number_format($n / 1000000, $precision). 'M';
} else if ($n < 900000000000) {
// Billion
$n_format = number_format($n / 1000000000, $precision). 'B';
} else {
// Trillion
$n_format = number_format($n / 1000000000000, $precision). 'T';
}
return $n_format;
}
函数自定义编号格式($n,$precision=1){
如果($n<900){
//违约
$n\u格式=数字\u格式($n);
}否则,如果($n<900000){
//泰山
$n_格式=数字_格式($n/1000,$precision)。'K';
}否则,如果($n<900000000){
//百万
$n_格式=数字_格式($n/1000000,$precision)。'M';
}其他如果($n<90000000000){
//十亿
$n_格式=数字_格式($n/100000000,$precision)。'B';
}否则{
//万亿
$n_格式=数字_格式($n/10000000000,$precision)。'T';
}
返回$n_格式;
}
功能编号\u缩写($number)
{
$abbrevs=[12=>'T',9=>'B',6=>'M',3=>'K',0=>'';
foreach($abbrevs作为$exponent=>$abbrev){
如果(abs($number)>=pow(10,$index)){
$display=$number/pow(10,$index);
$decimals=($index>=3&&round($display)<100)?1:0;
$number=数字\格式($display,$decimals)。$abbrev;
打破
}
}
返回$number;
}
适用于积极和消极方面。虽然这个问题很久以前被问到,但我有一个不同的解决方案,我认为更简单:
function shorten($number){
$suffix = ["", "K", "M", "B"];
$precision = 1;
for($i = 0; $i < count($suffix); $i++){
$divide = $number / pow(1000, $i);
if($divide < 1000){
return round($divide, $precision).$suffix[$i];
break;
}
}
}
echo shorten(1000);
函数缩短($number){
$suffix=[“”,“K”,“M”,“B”];
$precision=1;
对于($i=0;$i
我希望它对某些人仍然有帮助。试试这个。解释了k、M、B、T和Q(万亿次方)群。任何高于999Q的值都显示为999Q+
function number(float $num, int $precision = 2): string
{
$absNum = abs($num);
if ($absNum < 1000)
{
return (string)round($num, $precision);
}
$groups = ['k','M','B','T','Q'];
foreach ($groups as $i => $group)
{
$div = 1000 ** ($i + 1);
if ($absNum < $div * 1000)
{
return round($num / $div, $precision) . $group;
}
}
return '999Q+';
}
函数编号(float$num,int$precision=2):字符串
{
$absNum=abs($num);
如果($absNum<1000)
{
返回(字符串)四舍五入($num,$precision);
}
$groups=['k','M','B','T','Q'];
foreach($i=>$group的组)
{
$div=1000**($i+1);
如果($absNum<$div*1000)
{
返回轮($num/$div,$precision)。$group;
}
}
返回'999Q+';
}
基于之前的解决方案,我采取了不同的方法。基本上,它使用log()
函数来摆脱for
语句:
函数编号\u缩短($number,$precision=3)
{
$suffix=['''K','M','B','T','Qa','Qi'];
$index=(int)log(abs($number),1000);
$index=max(0,min(count($后缀)-1,$index));//钳制到有效后缀的索引
返回数字格式($number/1000**$index,$precision)。$后缀[$index];
}
它适用于正数和负数。你是说“K/M/G”代表的是Kilo/Meg吗
function custom_number_format($n, $precision = 1) {
if ($n < 900) {
// Default
$n_format = number_format($n);
} else if ($n < 900000) {
// Thausand
$n_format = number_format($n / 1000, $precision). 'K';
} else if ($n < 900000000) {
// Million
$n_format = number_format($n / 1000000, $precision). 'M';
} else if ($n < 900000000000) {
// Billion
$n_format = number_format($n / 1000000000, $precision). 'B';
} else {
// Trillion
$n_format = number_format($n / 1000000000000, $precision). 'T';
}
return $n_format;
}
function number_abbr($number)
{
$abbrevs = [12 => 'T', 9 => 'B', 6 => 'M', 3 => 'K', 0 => ''];
foreach ($abbrevs as $exponent => $abbrev) {
if (abs($number) >= pow(10, $exponent)) {
$display = $number / pow(10, $exponent);
$decimals = ($exponent >= 3 && round($display) < 100) ? 1 : 0;
$number = number_format($display, $decimals).$abbrev;
break;
}
}
return $number;
}
function shorten($number){
$suffix = ["", "K", "M", "B"];
$precision = 1;
for($i = 0; $i < count($suffix); $i++){
$divide = $number / pow(1000, $i);
if($divide < 1000){
return round($divide, $precision).$suffix[$i];
break;
}
}
}
echo shorten(1000);
function number(float $num, int $precision = 2): string
{
$absNum = abs($num);
if ($absNum < 1000)
{
return (string)round($num, $precision);
}
$groups = ['k','M','B','T','Q'];
foreach ($groups as $i => $group)
{
$div = 1000 ** ($i + 1);
if ($absNum < $div * 1000)
{
return round($num / $div, $precision) . $group;
}
}
return '999Q+';
}