我使用了一个函数来缩短数字。比如10k、30M等。我希望只有一个小数(4.9K),但前提是它与0不同。我需要7k而不是7.0K。我该怎么做?我试过str_replace,但它不起作用。有什么解决方案吗?
function num_short($n, $precision = 1) {
if ($n < 1000) {
$n_format = number_format($n);
} else if ($n < 1000000) {
$n_format = number_format($n / 1000, $precision) . 'K';
} else if ($n < 1000000000) {
$n_format = number_format($n / 1000000, $precision) . 'M';
} else {
$n_format = number_format($n / 1000000000, $precision) . 'B';
}
$n_format = str_replace("",".0",$n_format);
return $n_format;
}
@Amadan正在做某事。。。阿玛丹不愿解释的事情。
您可以将对number_format
的呼叫替换为round
,如下所示:
function num_short($n, $precision = 1) {
if ($n < 1000) {
$n_format = round($n);
} else if ($n < 1000000) {
$n_format = round($n / 1000, $precision) . 'K';
} else if ($n < 1000000000) {
$n_format = round($n / 1000000, $precision) . 'M';
} else {
$n_format = round($n / 1000000000, $precision) . 'B';
}
return $n_format;
}
但只有当四舍五入是你想要的时,这才是好的,例如:
echo num_short(5000, 1); //outputs 5K
echo num_short(5400, 1); //outputs 5.4K
echo num_short(5900, 1); //outputs 5.9K
echo num_short(5990, 1); //outputs 6K
你可以在Ideone.com上看到它的工作。
注意:我还将您的问题中的代码在Ideone.com上进行了测试,它给出了:
echo num_short(5000, 1)."'n"; //outputs 5.0K
echo num_short(5400, 1)."'n"; //outputs 5.4K
echo num_short(5900, 1)."'n"; //outputs 5.9K
echo num_short(5990, 1)."'n"; //outputs 6.0K
对此,我们可以看到number_format
以相同的方式循环。
round($n / 1000000, $precision) . 'M'
编辑:它不会删除所有小数,除非您的$n
超过浮点精度限制:
echo round(12345678 / 1000000, 1) . 'M';
=> 12.3M
来自@Theraot的公正评论。对于不取整,您可以使用:
(floor($n / (1000000 / pow(10, $precision))) / pow(10, $precision)) . 'M'
示例:
echo (floor(12345678 / (1000000 / pow(10, 1))) / pow(10, 1)) . 'M';
=> 12.3M