所以我有这个课程,欣赏数字。例如,AbbreviateNum::convert(1178);
将向上舍入并将其转换为1.18K
。
这很有效。但是,我似乎无法弄清楚如何输出负数。如果我运行AbbreviateNum::convert(-1178);
,它将输出相同的响应1.18K
。没有负面指标。
有关我如何解决此问题的任何提示?
<?php
namespace App\Helpers;
class AbbreviateNum
{
/**
* Abbreviate long numbers
*
* @return Response
*/
public static function convert($num)
{
$num = preg_replace('/[^0-9]/', '', $num);
$sizes = array("", "K", "M");
if ($num == 0) return(0);
else return (round($num/pow(1000, ($i = floor(log($num, 1000)))), 2) . $sizes[$i]);
}
}
答案 0 :(得分:1)
只需更改convert
方法论证(num
)&amp;的名称即可。做一个简单的strstr()
检查&#34; - &#34;。如果找到,请在结果前加上&#34; - &#34;像这样:
<?php
namespace App\Helpers;
class AbbreviateNum
{
/**
* Abbreviate long numbers
*
* @return Response
*/
public static function convert($givenNumber){
$num = preg_replace('/[^0-9]/', '', $givenNumber);
$sizes = array("", "K", "M");
if ($num == 0) {
return(0);
}else {
$number = (round($num/pow(1000, ($i = floor(log($num, 1000)))), 2) . $sizes[$i]);
if(strstr($givenNumber, "-")){
$number = "-" . $number;
}
return $number;
}
}
}
var_dump(AbbreviateNum::convert(-1785));
// PRODUCES: string '-1.79K' (length=6)
var_dump(AbbreviateNum::convert(1785));
// PRODUCES: string '1.79K' (length=5)
确认HERE。
希望这有点帮助...
干杯&amp;祝你好运; - )
答案 1 :(得分:1)
这是修改后的函数,它为它接受的字符串提供了更多的健壮性。
public static function convert($num)
{
$num = intval(preg_replace('/[^\-\.0-9]/', '', $num));
$sizes = array("", "K", "M");
if ($num == 0) return(0);
else return (round($num/pow(1000, ($i = floor(log(abs($num), 1000)))), 2) . $sizes[abs($i)]);
}
答案 2 :(得分:1)
对于此类转换,我使用sprintf功能:
public static function convert($num) {
$sizes = array("", "K", "M", "G", "T");
$i = 0;
$res = $num;
while (abs($num) > 1000) {$num /= 1000; $i++; $res = sprintf("%.2f$sizes[$i]", $num);}
return $res;
}