PHP计数大约千到一个K型计数,就像facebook共享一样。推特按钮等

PHP计数大约千到一个K型计数,就像facebook共享一样。推特按钮等,php,Php,好的,所以我试着将我的点击计数从数千转为一位数,也显示3000次点击,例如3K,就像Facebook共享和Twitter推特按钮一样。这是我的密码。知道我做错了什么吗 $postresultscount = (($resultscount) ? $resultscount->sumCount : 1); $k = 1000; $L = ''; if ($postresultscount > $k) { $echoxcount = round($postresultscount

好的,所以我试着将我的点击计数从数千转为一位数,也显示3000次点击,例如3K,就像Facebook共享和Twitter推特按钮一样。这是我的密码。知道我做错了什么吗

$postresultscount = (($resultscount) ? $resultscount->sumCount : 1);
$k = 1000;
$L = '';
if ($postresultscount > $k) {
    $echoxcount = round($postresultscount/$k);
    $L = 'K';
} else if ($postresultscount == $k) {
    $echoxcount = 1;
    $L = 'K';
} else {
    $echoxcount = $postresultscount;
}

echo 'document.write("'.$echoxcount.' '.$L.'")';

如果希望3500向下舍入到
3K
,请使用
floor
而不是
round

否则,您的代码可以工作,尽管存在问题。试试这个:

if ($postresultscount > 1000) {
  $result = floor($postresultscount / 1000) . 'K';
} else {
  $result = $postresultscount;
}

echo 'document.write("' . $result . '")";

您似乎正在使用PHP编写JavaScript,请小心。

比《Yuki》的帖子要好一点

if ($value > 999 && $value <= 999999) {
    $result = floor($value / 1000) . ' K';
} elseif ($value > 999999) {
    $result = floor($value / 1000000) . ' M';
} else {
    $result = $value;
}
if($value>999&&$value 999999){
$result=下限($value/1000000)。'M';
}否则{
$result=$value;
}

这是一个修改版本,使用小写字母k和m,并显示小数点后一位(以百万为单位)

<?php

    if ($value > 999 && $value <= 999999) {
    $result  = floor($value / 1000) . 'k';
    } elseif ($value > 999999) {
    $result  = number_format((float)$value , 1, '.', '')/1000000 . 'm';
    } else {
    $result  = $value;
    }
?>

这里有一个
PHP
函数,可以使用逗号将数字格式化为最接近千的数字,如千、百万、十亿和万亿

功能

function thousandsCurrencyFormat($num) {

  if($num>1000) {

        $x = round($num);
        $x_number_format = number_format($x);
        $x_array = explode(',', $x_number_format);
        $x_parts = array('k', 'm', 'b', 't');
        $x_count_parts = count($x_array) - 1;
        $x_display = $x;
        $x_display = $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '');
        $x_display .= $x_parts[$x_count_parts - 1];

        return $x_display;

  }

  return $num;
}
输出

thousandsCurrencyFormat(3000) - 3k
thousandsCurrencyFormat(35500) - 35.5k
thousandsCurrencyFormat(905000) - 905k
thousandsCurrencyFormat(5500000) - 5.5m
thousandsCurrencyFormat(88800000) - 88.8m
thousandsCurrencyFormat(745000000) - 745m
thousandsCurrencyFormat(2000000000) - 2b
thousandsCurrencyFormat(22200000000) - 22.2b
thousandsCurrencyFormat(1000000000000) - 1t (1 trillion)
资源

我根据bashy创建的以人类可读形式显示字节的函数改编了此函数:


这个问题已经8年了,但每次我看到一个包含
else
语句的答案时,我认为它可以在一个简单的时间内完成


四舍五入,不考虑任何超过“k”或“千”的缩写,显示小数点后一位

function numToKs($number) {
    if ($number >= 1000) {
        return number_format(($number / 1000), 1) . 'k';
    } else {
        return $number;
    }
}
function kConverter($number) {
    if ($number >= 1000) {
        return number_format(($number / 1000), 1) . 'k';
    } else {
        return $number;
    }
}

kConverter(1)          = 1
kConverter(111)        = 111
kConverter(999)        = 999
kConverter(1000)       = "1.0k"
kConverter(1499)       = "1.5k"
kConverter(1500)       = "1.5k"
kConverter(1501)       = "1.5k"
kConverter(1550)       = "1.6k"
kConverter(11501)      = "11.5k"
kConverter(1000000000) = "1,000,000.0k"
kConverter(1234567890) = "1,234,567.9k"

这个问题的目的和这里的问题一样

参考:

请尝试以下代码:

function number_format_short( $n, $precision = 1 ) {
    if ($n < 900) {
        // 0 - 900
        $n_format = number_format($n, $precision);
        $suffix = '';
    } else if ($n < 900000) {
        // 0.9k-850k
        $n_format = number_format($n / 1000, $precision);
        $suffix = 'K';
    } else if ($n < 900000000) {
        // 0.9m-850m
        $n_format = number_format($n / 1000000, $precision);
        $suffix = 'M';
    } else if ($n < 900000000000) {
        // 0.9b-850b
        $n_format = number_format($n / 1000000000, $precision);
        $suffix = 'B';
    } else {
        // 0.9t+
        $n_format = number_format($n / 1000000000000, $precision);
        $suffix = 'T';
    }
  // Remove unecessary zeroes after decimal. "1.0" -> "1"; "1.00" -> "1"
  // Intentionally does not affect partials, eg "1.50" -> "1.50"
    if ( $precision > 0 ) {
        $dotzero = '.' . str_repeat( '0', $precision );
        $n_format = str_replace( $dotzero, '', $n_format );
    }
    return $n_format . $suffix;
}

四舍五入,不考虑任何超过“k”或“千”的缩写,显示小数点后一位

function numToKs($number) {
    if ($number >= 1000) {
        return number_format(($number / 1000), 1) . 'k';
    } else {
        return $number;
    }
}
function kConverter($number) {
    if ($number >= 1000) {
        return number_format(($number / 1000), 1) . 'k';
    } else {
        return $number;
    }
}

kConverter(1)          = 1
kConverter(111)        = 111
kConverter(999)        = 999
kConverter(1000)       = "1.0k"
kConverter(1499)       = "1.5k"
kConverter(1500)       = "1.5k"
kConverter(1501)       = "1.5k"
kConverter(1550)       = "1.6k"
kConverter(11501)      = "11.5k"
kConverter(1000000000) = "1,000,000.0k"
kConverter(1234567890) = "1,234,567.9k"
我的职能

function numsize($size,$round=2){
    $unit=['', 'K', 'M', 'B', 'T'];
    return round($size/pow(1000,($i=floor(log($size,1000)))),$round).$unit[$i];
}

对于这个特别古老的问题,已经给出了几个很好的答案,但是,大多数对我来说太简单了,或者不容易扩展到更多的单元,因此我使用以下方法:

# The function that returns a number formatted as a string in thousands, millions etc.
public static function getNumberAbbreviation (Int $number, Int $decimals = 1) : String {
    # Define the unit size and supported units.
    $unitSize = 1000;
    $units = ["", "K", "M", "B", "T"];

    # Calculate the number of units as the logarithm of the absolute value with the
    # unit size as base.
    $unitsCount = ($number === 0) ? 0 : floor(log(abs($number), $unitSize));

    # Decide the unit to be used based on the counter.
    $unit = $units[min($unitsCount, count($units) - 1)];

    # Divide the value by unit size in the power of the counter and round it to keep 
    # at most the given number of decimal digits.
    $value = round($number / pow($unitSize, $unitsCount), $decimals);

    # Assemble and return the string.
    return $value . $unit;
}

受推特的启发,我创建了自己的方法

功能:

function legibleNumb($numb, $lang = 'en') {
    if ($lang == 'tr') { // Usage with commas in Turkish
        if ($numb >= 1000000) { // Million
            if (strstr(round(number_format($numb,0,',','.'),1),'.')) {
                $legibleNumb = number_format(round(number_format($numb,0,',','.'),1),1,',','.') . ' Mn';
            } else {
                $legibleNumb = round(number_format($numb,0,',','.'),1) . ' Mn';
            }
        } elseif ($numb >= 100000 && $numb < 1000000) { // One hundred thousand
            $legibleNumb = round(number_format($numb,0,',','.'),0) . ' B';
        } elseif ($numb >= 10000 && $numb < 100000) { // Ten thousand
            if (strstr(round(number_format($numb,0,',','.'),1),'.')) {
                $legibleNumb = number_format(round(number_format($numb,0,',','.'),1),1,',','.') . ' B';
            } else {
                $legibleNumb = round(number_format($numb,0,',','.'),1) . ' B';
            }
        } else {
            $legibleNumb = number_format($numb,0,',','.');
        }
    } else { // Dotted usage in English
        if ($numb >= 1000000) { // Million
            $legibleNumb = round(number_format($numb,0,',','.'),1) . ' M';
        } elseif ($numb >= 100000 && $numb < 1000000) { // One hundred thousand
            $legibleNumb = round(number_format($numb,0,',','.'),0) . ' K';
        } elseif ($numb >= 10000 && $numb < 100000) { // Ten thousand
            $legibleNumb = round(number_format($numb,0,',','.'),1) . ' K';
        } else {
            $legibleNumb = number_format($numb,0,',','.');
        }
    }
    return $legibleNumb;
}
结果:

10 M
10 Mn

54.7 K
54,7 B

5.466
5.466

您可以在这里尝试并查看示例用法:

if($num>1000)中的Wrap函数{}else返回$num;这是一个很好的函数,但是如果数字输入像:456399.23??错误,数字输入小于1000,你能给我一个代码吗?谢谢你的反馈@huykon225我已经编辑了function@RafaSashi对我有用。感谢您的分享,谢谢您的分享。请考虑对代码添加解释,以及为什么要为答案选择。我只是照搬了我对这个问题的回答:
function numsize($size,$round=2){
    $unit=['', 'K', 'M', 'B', 'T'];
    return round($size/pow(1000,($i=floor(log($size,1000)))),$round).$unit[$i];
}
# The function that returns a number formatted as a string in thousands, millions etc.
public static function getNumberAbbreviation (Int $number, Int $decimals = 1) : String {
    # Define the unit size and supported units.
    $unitSize = 1000;
    $units = ["", "K", "M", "B", "T"];

    # Calculate the number of units as the logarithm of the absolute value with the
    # unit size as base.
    $unitsCount = ($number === 0) ? 0 : floor(log(abs($number), $unitSize));

    # Decide the unit to be used based on the counter.
    $unit = $units[min($unitsCount, count($units) - 1)];

    # Divide the value by unit size in the power of the counter and round it to keep 
    # at most the given number of decimal digits.
    $value = round($number / pow($unitSize, $unitsCount), $decimals);

    # Assemble and return the string.
    return $value . $unit;
}
function legibleNumb($numb, $lang = 'en') {
    if ($lang == 'tr') { // Usage with commas in Turkish
        if ($numb >= 1000000) { // Million
            if (strstr(round(number_format($numb,0,',','.'),1),'.')) {
                $legibleNumb = number_format(round(number_format($numb,0,',','.'),1),1,',','.') . ' Mn';
            } else {
                $legibleNumb = round(number_format($numb,0,',','.'),1) . ' Mn';
            }
        } elseif ($numb >= 100000 && $numb < 1000000) { // One hundred thousand
            $legibleNumb = round(number_format($numb,0,',','.'),0) . ' B';
        } elseif ($numb >= 10000 && $numb < 100000) { // Ten thousand
            if (strstr(round(number_format($numb,0,',','.'),1),'.')) {
                $legibleNumb = number_format(round(number_format($numb,0,',','.'),1),1,',','.') . ' B';
            } else {
                $legibleNumb = round(number_format($numb,0,',','.'),1) . ' B';
            }
        } else {
            $legibleNumb = number_format($numb,0,',','.');
        }
    } else { // Dotted usage in English
        if ($numb >= 1000000) { // Million
            $legibleNumb = round(number_format($numb,0,',','.'),1) . ' M';
        } elseif ($numb >= 100000 && $numb < 1000000) { // One hundred thousand
            $legibleNumb = round(number_format($numb,0,',','.'),0) . ' K';
        } elseif ($numb >= 10000 && $numb < 100000) { // Ten thousand
            $legibleNumb = round(number_format($numb,0,',','.'),1) . ' K';
        } else {
            $legibleNumb = number_format($numb,0,',','.');
        }
    }
    return $legibleNumb;
}
echo legibleNumb(9999999,'en');
echo legibleNumb(9999999,'tr');

echo legibleNumb(54669,'en');
echo legibleNumb(54669,'tr');

echo legibleNumb(5466,'en');
echo legibleNumb(5466,'tr');
10 M
10 Mn

54.7 K
54,7 B

5.466
5.466