Mám funkci pro přidání čárek k číslům:
function commafy( num ) { num.toString().replace( /B(?=(?:d{3})+)$/g, "," ); }
Bohužel nemá moc rád desetinná místa. Vzhledem k následujícím příkladům použití, jaký je nejlepší způsob rozšíření mé funkce?
commafy( "123" ) // "123" commafy( "1234" ) // "1234" // Don't add commas until 5 integer digits commafy( "12345" ) // "12,345" commafy( "1234567" ) // "1,234,567" commafy( "12345.2" ) // "12,345.2" commafy( "12345.6789" ) // "12,345.6789" // Again, nothing until 5 commafy( ".123456" ) // ".123 456" // Group with spaces (no leading digit) commafy( "12345.6789012345678" ) // "12,345.678 901 234 567 8"
Pravděpodobně nejjednodušší způsob je nejprve dělit na desetinnou čárku (pokud existuje). Kam se odtud nejlépe vydat?
Odpověď
Stačí rozdělit na dvě části pomocí znaku „.“ a naformátovat je jednotlivě.
function commafy( num ) { var str = num.toString().split('.'); if (str[0].length >= 5) { str[0] = str[0].replace(/(d)(?=(d{3})+$)/g, '$1,'); } if (str[1] && str[1].length >= 5) { str[1] = str[1].replace(/(d{3})/g, '$1 '); } return str.join('.'); }