php用K / M缩写数字

时间:2011-08-02 01:18:34

标签: php function numbers abbreviation

下面的函数找到数字,将其四舍五入并在其末尾加上K或M

IE:25000变为25K

function abbr_no($number) {
 $number  = preg_replace('/[^0-9]/', '', $number);
 $numbers = array('', 'K', 'M');
if ($number == 0) { 
 return('n/a'); 
 } else {
 return (round($number/pow(10000, ($i = floor(log($number, 10000)))), 0) . $numbers[$i]);
 }
}

所以它基本上做了我想要的,但是对于像 389345 这样的数字它将它四舍五入并吐出 39K (因为它应该)但是我会比如 398K (3位数字)

的结果

现在在最后一行:

0) . $numbers[$i]);

如果我将0更改为1,则结果变为 39.8K 但是我再次不想要小数点,所以我目前卡住并且遇到了砖墙

一如既往,所有的帮助都表示赞赏,并提前感谢您。

2 个答案:

答案 0 :(得分:1)

这允许您转换各种比例,

function humanize($val, $postfix)
{
    foreach ($postfix as $p=>$div) {
        $t=round($val/$div) . $p;
        if (strlen($t)<(3+strlen($p))) {
            break;
        }
    }
    return trim($t);
}

e.g。

$postfix=array(''=>1, 'K'=>1000,'M'=>1000000,'B'=>1000000000);

回答原来的问题,

$postfix=array('walnut' => 0.16, 'chicken egg'=>0.35, 
    'grapefruit' => 1, 'bulgarian airbag' => 1.1,
    'bulgarian funbag'=>3.27, 'football' => 11.07, 
    'olympic swim pool' => 4780114, 'known universe'=>1.17456E4933);

表示Vulture Central Weights and Measures Soviet音量标准。

答案 1 :(得分:0)

无需编辑大部分代码,您可以添加额外的if语句 测试模块除以1 yournumber%1

($i = floor(log($number, 10000)))), 0) % 1

给你0 如果没有那么

将你的数字乘以10(你可以使它成为一个while语句,所以它将它乘以10,直到小数点后面没有空格)

然后返回该号码

所以如果您使用像39.8这样的you_number作为示例,它将看起来像这样

while(your_number%1 != 0){
 your_number*=10;
}
return your_number;

这是一个快速解决方案,但它绝对不是编码本

的最佳方式