【问题标题】:php abbreviating numbers with K/Mphp用K/M缩写数字
【发布时间】:2011-08-02 01:18:34
【问题描述】:

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

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

【问题讨论】:

  • 不应该吐出39K,而是正确的389K(除非你在做我不做的事理解)。将10000 更改为1000
  • 389345不应该变成39k吗?我认为有问题,但目前无法验证..
  • 好,该睡觉了,我想大声笑..感谢 Wrikken 给了很多 0 的问题 :)
  • 389345 它四舍五入并吐出 39K(应该如此)但是我希望结果是 398K | 更正: 389345 将其四舍五入并吐出 390K(应该如此),但我希望结果为 389K。有人尝试编辑这部分问题吗?

标签: php function numbers abbreviation


【解决方案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);

对于Vulture Central Weights and Measures Soviet 音量标准。

【讨论】:

  • @Bazuka 好多了。为什么不编辑答案以包含此更正?
【解决方案2】:

无需编辑大部分代码,您可以添加额外的 if 语句 测试模除以 1 你的号码%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-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多