Php 缩写数字功能赢得';t输出负值
所以我有一门课,它欣赏数字。例如,Php 缩写数字功能赢得';t输出负值,php,preg-replace,Php,Preg Replace,所以我有一门课,它欣赏数字。例如,缩写num::convert(1178)将取整并将其转换为1.18K 这很好地发挥了应有的作用。然而,我似乎不知道如何输出负数。如果我运行缩写num::convert(-1178),它将输出相同的响应1.18K。没有负面指标 关于如何解决这个问题有什么建议吗 <?php namespace App\Helpers; class AbbreviateNum { /** * Abbreviate long numbers *
缩写num::convert(1178)
将取整并将其转换为1.18K
这很好地发挥了应有的作用。然而,我似乎不知道如何输出负数。如果我运行缩写num::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)
只需更改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)
这里是一个修改过的函数,它为它将接受的字符串提供了一点更健壮的功能
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)]);
}
这是一个修改过的函数,它为它将接受的字符串提供了一点健壮性
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)]);
}
对于这种转换,我将使用函数:
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;
}
对于这种转换,我将使用函数:
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;
}
您的正则表达式将删除符号。。。(以及任何小数点)为什么不从输入的绝对值计算它,然后如果原始输入小于0,则返回0-$output
?您的正则表达式将删除符号。。。(以及任何小数点)为什么不从输入的绝对值计算它,然后如果原始输入小于0,则返回0-$output
?我知道你在这里做了什么-非常好!我知道你在这里做了什么-非常好!这很有效,谢谢。但是@cmorrissey提供了一个稍微干净一点的解决方案。这很有效,谢谢。但是@cmorrissey提供了一个稍微干净一点的解决方案。