2009-06-04 7 views
1

数字を浮動小数点数または整数に変更して、人間が読めるように整形された素数を単位として文字列として表示するアルゴリズムを見つけるのに苦労しました。たとえば、120000000を「120 mil」に変換するための素晴らしいPHPアルゴリズムですか?

100500000 -> '100.5 Mil' 
200400 -> '200.4 K' 
143000000 -> '143 Mil' 
52000000000 -> '52 Bil' 

などです。

任意のポインタ?

+0

i18nを考慮して、現在のロケールに正しい小数点の区切り記号(例:ドイツのコンマ)を使用してください。 :-) – JeeBee

答えて

6

私はこれ(下のコードを適応させるだろう私はネット上で見つけました):

コード信用は私が見つけたこのリンクに行く:あなたはまだ興味を持っている場合http://www.phpfront.com/php/human-readable-byte-format/

function humanReadableOctets($octets) 
{ 
    $units = array('B', 'kB', 'MB', 'GB', 'TB'); // ...etc 

    for ($i = 0, $size =$octets; $size>1024; $size=$size/1024) 
     $i++; 

    return number_format($size, 2) . ' ' . $units[min($i, count($units) -1)]; 
} 

はしかし1000年に1024に変更することを忘れないでください...ここで

+6

実際には、$ unit = $ units [log($ n)]の行だけで何かを行うことができます。 – n3rd

+0

素晴らしい検索!ありがとう! –

4
<?php 

function prettyNumber($number) // $number is int/float 
{ 
    $orders = Array("", " K", " Mil", " Bil"); 
    $order=0; 
    while (($number/1000.0) >= 1.5) { // while the next step up would generate a number greater than 1.5 
    $order++; 
    $number/=1000.0; 
    } 
    if ($order) 
    return preg_replace("/\.?0+$/", "", 
     substr(number_format($number, 2),0,5)).$orders[$order]; 
    return $number; 
} 

$tests = array(100500000,200400,143000000,52000000000); 
foreach ($tests as $test) 
{ 
    echo $test." -> '".prettyNumber($test)."'\n"; 
} 
+0

私はそれが好きです。私は特に含まれているテストが好きです。 – Christian

2

log()バージョンです:

function wordify($val, $decimalPlaces = 1) { 
    if ($val < 1000 && $val > -1000) 
     return $val; 
    $a = array(0 => "", 1 => "K", 2 => "Mil", 3 => "Bil", 4 => "Tril", 5 => "Quad"); 
    $log1000 = log(abs($val), 1000); 
    $suffix = $a[$log1000]; 
    return number_format($val/pow(1000, floor($log1000)), $decimalPlaces, '.', '') . " $suffix"; 
} 

$tests = array(-1001, -970, 0, 1, 929, 1637, 17000, 123456, 1000000, 1000000000, 1234567890123); 

foreach ($tests as $num) { 
    echo wordify($num)."<br>"; 
} 
+0

ありがとうございます。 –

関連する問題