下面的函数找到数字,将其四舍五入并在其末尾加上K或M
IE:25000变为25K
function abbr_no($number) {
$number = preg_replace('/[^0-9]/', '', $number);
$numbers = array('', 'K', 'M');
if ($number == 0) {
return('n/a');
} else {
return (round($number/pow(10000, ($i = floor(log($number, 10000)))), 0) . $numbers[$i]);
}
}
所以它基本上做了我想要的,但是对于像 389345 这样的数字它将它四舍五入并吐出 39K (因为它应该)但是我会比如 398K (3位数字)
的结果现在在最后一行:
0) . $numbers[$i]);
如果我将0更改为1,则结果变为 39.8K 但是我再次不想要小数点,所以我目前卡住并且遇到了砖墙
一如既往,所有的帮助都表示赞赏,并提前感谢您。
答案 0 :(得分:1)
这允许您转换各种比例,
function humanize($val, $postfix)
{
foreach ($postfix as $p=>$div) {
$t=round($val/$div) . $p;
if (strlen($t)<(3+strlen($p))) {
break;
}
}
return trim($t);
}
e.g。
$postfix=array(''=>1, 'K'=>1000,'M'=>1000000,'B'=>1000000000);
回答原来的问题,
$postfix=array('walnut' => 0.16, 'chicken egg'=>0.35,
'grapefruit' => 1, 'bulgarian airbag' => 1.1,
'bulgarian funbag'=>3.27, 'football' => 11.07,
'olympic swim pool' => 4780114, 'known universe'=>1.17456E4933);
答案 1 :(得分:0)
无需编辑大部分代码,您可以添加额外的if语句 测试模块除以1 yournumber%1
($i = floor(log($number, 10000)))), 0) % 1
给你0 如果没有那么
将你的数字乘以10(你可以使它成为一个while语句,所以它将它乘以10,直到小数点后面没有空格)
然后返回该号码
所以如果您使用像39.8这样的you_number作为示例,它将看起来像这样
while(your_number%1 != 0){
your_number*=10;
}
return your_number;
这是一个快速解决方案,但它绝对不是编码本
的最佳方式