[2.1-dev] Zarovnávání čísel
- Mysteria
- Člen | 797
Zdravím, do jedné aplikace řeším zarovnávání čísel (různě
dlouhá, můžou i nemusí mít desetinná čísla).
Výsledek musí být takový aby byly pod sebou řády.
125 265
25 658.25
58.60
Vytvořil jsem si na to helper:
public static function fixedNumber($number, $numCount = 0, $decCount = 0) {
if ($decCount !== 0) $numCount += $decCount + 1;
echo str_replace(' ', ' ', Strings::padLeft(number_format($number, $decCount, '.', ' '), $numCount, ' '));
}
Tohle je funkční, ale…
Za prvé, protože mezera nejde použít pro vyplnění znaků před číslem,
tak používám nějakou ‚číselnou mezeru‘ (je stejně široká jako
číslo, tzn. entita:
 
Pokud ale dám rovnou tuhle entitu do Strings::padLeft, tak to dopadne špatně, například takto:
33.87% (+&0.02%) HTML: 33.87% (+&0.02%)
Pokud tam ale dám normální mezeru a nahradím ji entitou, tak je to v pohodě (z toho mi vychází, že ‚problém‘ je v padLeft funkci, nebere entitu jako jeden znak, ale jako posloupnost několika znaků):
33.87% (+ 0.02%) HTML: 33.87% (+ 0.02%)
Tady mi jde čistě jenom o to, jestli by to nešlo udělat nějak, abych nemusel používat ten replace…
Druhá věc: Aby se mi správně vypsala ta entita, tak buď musím vypisovat přímo v helperu místo returnu nebo pak u všech proměnných, kde používám tenhle helper vypnout escapování, protože pokud to neudělám, tak se mi místo
 
 
Co se týká samotných dat, tak ty jsou bezpečná, takže ve vypnutí escapování bych neviděl takovej problém, spíš bych se chtěl ujistit jestli je to správná cesta nebo jestli to jde udělat nějak jinak.
Dík za názory.
- David Matějka
- Moderator | 6445
- asi budes muset pouzivat ten replace
- vracej:
return \Nette\Utils\Html::el()->setHtml($data);
pak neni potreba escapovat v sablone