删除小数位而不进行舍入

时间:2012-04-04 18:07:13

标签: php number-formatting

我有一个功能可以将60000转换为60k或60100转换为60.1k

但是如果我要输入例如60123,它将输出60​​.123k

如何在没有像number_format那样四舍五入的情况下输出60.1k。

编辑:这是我执行转换的功能

function format($val) {
$letter = "";
while ($val >= 1000) {
$val /= 1000;
$letter .= "K";
}
$letter = str_replace("KKKK", "000B", $letter);
$letter = str_replace("KKK", "B", $letter);
$letter = str_replace("KK", "M", $letter);
return $val.$letter;
}

这是我用来回应的内容

echo format(1)."<br>";
echo format(123548)."<br>";
echo format(1000000)."<br>";
echo format(1000000000)."<br>";
echo format(1200000000)."<br>";

这是输出:

1
123.548K
1M
1B
1.2B

对于123.548K,我希望它只是“123.5K”

3 个答案:

答案 0 :(得分:2)

您可以使用楼层功能:http://www.php.net/manual/en/function.floor.php - 请注意楼层(-1.2)= -2,如果可以的话。

答案 1 :(得分:1)

$value = 123;
echo number_format($value / 1000, 2).'k';

编辑(没有看到有关舍入的评论)。将值视为字符串:

$value = 60146;
$value = $value / 1000;
$value = substr($value, 0, strpos($value, '.')).'.'.substr($value, strpos($value, '.'), 3).'k';
echo $value;

答案 2 :(得分:1)

请尝试以下

function format($val) {
    $letter = "";
    while ($val >= 1000) {
        $val /= 1000;
        $letter .= "K";
    }
    $val = round($val, 1); // it provides the correct format
    $letter = str_replace("KKKK", "000B", $letter);
    $letter = str_replace("KKK", "B", $letter);
    $letter = str_replace("KK", "M", $letter);
    return $val.$letter;
}