如何根据千克转换数字?

时间:2016-07-10 18:23:39

标签: php mysql sql function

我有一张这样的表:

// table
+----+--------+------------+
| id |  name  | reputation |
+----+--------+------------+
| 1  | jack   | 534431     |
| 2  | peter  | 334        |
| 3  | amos   | 1300       |
| 4  | carter | 13490      |
| 5  | basil  | 1351       |
+----+--------+------------+

现在我想将reputation的值转换为基于千克的数字。目前我通过SQL做到这一点。像这样:

SELECT id, name,
    CASE WHEN value >= 1000 THEN
         CONCAT(TRIM(TRAILING '.' FROM SUBSTR(TRUNCATE(number/1000, 1), 1, 4)), 'k')
         ELSE value
    END as reputation
FROM `table` 

是的,它有效,我想知道如何通过PHP做到这一点?我想这样做会更灵活,更快捷。那有没有PHP功能?

编辑:以下是上述查询的输出:

// newtable
+----+--------+------------+
| id |  name  | reputation |
+----+--------+------------+
| 1  | jack   | 534k       |
| 2  | peter  | 334        |
| 3  | amos   | 1.3k       |
| 4  | carter | 13.4k      |
| 5  | basil  | 1.3k       |
+----+--------+------------+

2 个答案:

答案 0 :(得分:0)

您可能选择使用PHP的一个原因是,当您想要显示其他值(如M(百万))时,它会提供一些灵活性,或者可能为每个值级别显示不同的后缀,例如当您在数以千计显示K,数以百万计显示M.

以下是一些可以在PHP中使用的代码:

function getPrettyNumber($n) {
        if($n>=1000000000000) return round(($n/1000000000000),1).'T';
        else if($n>=1000000000) return round(($n/1000000000),1).'B';
        else if($n>=1000000) return round(($n/1000000),1).'M';
        else if($n>=1000) return round(($n/1000),1).'K';

        return number_format($n);
}

使用round()和1作为第二个参数是可选的 您可以轻松修改上述代码以适合您的使用案例。

答案 1 :(得分:0)

最佳解决方案

function getPrettyNumber($n) {
    if     ( $n < 10000 )     return $n;
    elseif ( $n < 100000 )    return round( $n / 1000, 1) . "k";
    elseif ( $n < 1000000 )   return floor( $n / 1000 )   . "k";
    elseif ( $n < 1000000000) return floor( $n / 1000000) . "M";
    else                      return "Wow!!!";      
}

此处还有一些示例

1        => 1
10       => 10
100      => 100
1000     => 1000
1001     => 1001
10000    => 10k
10100    => 10.1k
100000   => 100k
101000   => 101k
101111   => 101k
1000000  => 1M
1111111  => 1M
10111111 => 10M
11000000 => 11M