2011-08-02 61 views
0

功能下面發現數,舍入它關閉,並把一個K或M於它PHP縮寫號碼具有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]); 
} 
} 

,所以它基本上我想要做什麼,但對於許多像便將其關閉,並吐出39K(因爲它應該),但我想的結果是398K(3位數字)

現在在最後返回線:

0) . $numbers[$i]); 

如果我將0改爲1結果變成39.8K但我又不想小數點,所以我目前被卡住,紛紛創出磚牆

一如既往所有的幫助表示感謝,並提前感謝您。

+2

它不應該吐出_39K_,而是_correct 389K_(除非你正在做的事情我不明白)。將'10000'改爲'1000'。 – Wrikken

+0

389345不應該變成39k嗎?我覺得有什麼問題,但現在不能驗證.. – bertzzie

+0

好的時候睡覺我覺得哈哈..感謝Wrikken很多0的是問題:) – Dizzi

回答

0

沒有編輯太多你的代碼,你可以添加額外的if語句 測試,如果模塊化除以1 yournumber%1

($i = floor(log($number, 10000)))), 0) % 1 

給你0 如果它不那麼

乘以你的電話號碼減10(你可以做一段時間的陳述,所以它乘以10,直到小數點後沒有空格)

然後返回那個數字

所以如果你使用your_number像39.8作爲一個例子它看起來像這樣

while(your_number%1 != 0){ 
your_number*=10; 
} 
return your_number; 

這速戰速決,但它絕對不是最好的實現代碼

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); 
} 

eg

$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); 

Vulture Central Weights and Measures Soviet量標準。

+0

更正的代碼是'if(strlen($ t)<=( 3 + strlen($ p))){' – Bazuka