缩写数字函数不会输出负值
Abbreviate Number Function Won't Output Negative Value
所以我有这个 class,它欣赏数字。例如,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]);
}
}
只需更改 convert
方法参数的名称 (num
) 并执行简单的 strstr()
检查“-”。如果找到,请在结果前加上“-”前缀,如下所示:
<?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.
希望对您有所帮助...
干杯,祝你好运 ;-)
这里是修改后的函数,它为其接受的字符串提供了更多的稳健性。
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)]);
}
对于这样的转换,我会使用 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;
}
所以我有这个 class,它欣赏数字。例如,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]);
}
}
只需更改 convert
方法参数的名称 (num
) 并执行简单的 strstr()
检查“-”。如果找到,请在结果前加上“-”前缀,如下所示:
<?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.
希望对您有所帮助...
干杯,祝你好运 ;-)
这里是修改后的函数,它为其接受的字符串提供了更多的稳健性。
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)]);
}
对于这样的转换,我会使用 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;
}