我使用了一个函数来缩短数字。像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;
}
答案 0 :(得分:1)
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
答案 1 :(得分:1)
您可以将来自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
你可以看到它working at Ideone.com。
注意:我还将您问题中的代码转到testing at 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
以相同的方式进行。{/ p>