0

下面的函数找到数字,将其四舍五入并在其末尾添加 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,但我又不想要小数点,所以我目前被卡住并撞到了砖墙

一如既往地感谢所有帮助,并提前感谢您。

4

2 回答 2

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);
}

例如

$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);

秃鹫中央度量衡苏联体积标准。

于 2011-08-02T08:57:13.880 回答
0

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

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

如果没有,则给您 0

将您的数字乘以 10(您可以将其设为 while 语句,以便将其乘以 10,直到小数点后没有空格)

然后返回那个数字

因此,如果您以 your_number 39.8 为例,它看起来像这样

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

这是一个快速修复,但它绝对不是最好的编码方式

于 2011-08-02T01:32:21.870 回答