Potřebovala jsem funkci, která mi vrátí číslo v matematickém formátu vhodném například pro zápis do matematických vzorců ve formátu HTML.
Vytvořila jsem si pro tento účel funkci, která přidá oddělovače tisíců, desetinnou tečku čísla float nahradí desetinnou čárkou a dále ponechá příslušná desetinná místa aniž by stanovila či měnila jejich počet.
Pro tento účel mi nestačila PHP funkce number_format
, protože vyžaduje určitý počet desetinných míst, pokud mají být vyplněny další parametry. Navíc i kdych ve funkci number_format
použila určitý pevný počet míst a přebytečné nuly zprava „vyhodila“, tak bych mohla mít například problém s malými čísly, které by mohly díky této úpravě vyjít 0. A kdyby to bylo ve jmenovateli, tak 0 ve jmenovateli být nesmí a byl by to problém.
Matematický formát čísla do vzorců v HTML
function mathFormat($number) { if (is_numeric($number)) { if (strpos($number, '.') !== FALSE) { list($celaCast, $desetinnaCast) = explode('.', $number); $celaCast = number_format($celaCast, 0, ',', ' '); $number = $celaCast.','.$desetinnaCast; } else { $number = number_format($number, 0, ',', ' '); } $number = str_replace(' ', ' ', $number); $number = '<span style="white-space: nowrap;">'.$number.'</span>'; return $number; } else { return FALSE; } }
Příklad použití
$a = 1234567.234567; $b = 1.2e3; $c = 1.7E+10; $d = 7E-10; $e = 3.14; $f = -3.14; $g = 0; $h = 4556; $i = 10/3; // výtisk čísla v HTML má podobu: 1234567.234567 matematicky format: <span style="white-space: nowrap;">1 234 567,234567</span> echo $a.' matematicky format: '.mathFormat($a).'
'; // 1234567.234567 matematicky format: 1 234 567,234567 echo $b.' matematicky format: '.mathFormat($b).'
'; // 1200 matematicky format: 1 200 echo $c.' matematicky format: '.mathFormat($c).'
'; // 17000000000 matematicky format: 17 000 000 000 echo $d.' matematicky format: '.mathFormat($d).'
'; // 7.0E-10 matematicky format: 7,0E-10 echo $e.' matematicky format: '.mathFormat($e).'
'; // 3.14 matematicky format: 3,14 echo $f.' matematicky format: '.mathFormat($f).'
'; // -3.14 matematicky format: -3,14 echo $g.' matematicky format: '.mathFormat($g).'
'; // 0 matematicky format: 0 echo $h.' matematicky format: '.mathFormat($h).'
'; // 4556 matematicky format: 4 556 echo $i.' matematicky format: '.mathFormat($i).'
'; // 3.3333333333333 matematicky format: 3,3333333333333
Zúžená mezera
Funkce vkládá matematické mezery   místo častěji používané tvrdé mezery .
  je zúžená mezera, která by se měla správně používat pro oddělovače tisíců. Dříve nebyla správně podporována v prohlížečích. Nyní je již její podpora větší. Vzhledem k tomu, že tato mezera je ale zalomitelná, tak jsem výsledný vrácený text obalila tagem <span style="white-space: nowrap">, který zabrání zalomení čísla.
Funkce očekává celé číslo či číslo float. Funguje však i na float zadané v plovoucí desetinné čárce pomocí exponentu E či e. I když koukám, že číslo v tomto formátu by se správně mělo zobrazovat jinak a ještě by měly být udělány i oddělovače za desetinnou čárkou. Možná časem ještě funkci doupravím…
Další zdroje
- Typografické rady: mezery – wikipedia.org,
- Matematické vzorce – wikipedia.org.