2011-12-30 10 views
87

Czy można formatować liczby za pomocą CSS? Czyli: miejsc po przecinku, separator dziesiętny, separator tysięcy, itpFormatowanie liczb (miejsca dziesiętne, separatory tysięcy itp.) Za pomocą CSS

+42

Nie możesz, ale naprawdę powinieneś być w stanie. W końcu 50 000 lub 50000 lub 50 000,00 to te same "dane", które po prostu przedstawiono inaczej, do czego służy CSS. – MrMisterMan

+3

@MrMisterMan: Jest tu kilka pomysłów: http://wiki.csswg.org/ideas/content-formatting#numbers Prawdopodobnie będę nękany i oskarżony o cytowanie "specyfikacji" i wzbudzanie nadziei chociaż. I dla mnie jestem ciekawy, jak traktować tutaj tekst nieliczbowy. – BoltClock

+3

Chociaż zgadzam się, że byłoby to miłe mieć, numer jest osadzony na stronie w innym miejscu. Oznacza to, że reszta strony to angielski, chiński lub jakikolwiek inny język, a liczby powinny odpowiadać IMO tej lokalizacji. Dlaczego powinny być zlokalizowane oddzielnie od reszty strony ...? – deceze

Odpowiedz

17

Cóż, dla wszelkich liczb w JavaScript Używam następny:

var a = "1222333444555666777888999"; 
a = a.replace(new RegExp("^(\\d{" + (a.length%3?a.length%3:0) + "})(\\d{3})", "g"), "$1 $2").replace(/(\d{3})+?/gi, "$1 ").trim(); 

i jeśli trzeba używać innych jako separator przecinek na przykład:

var sep = ","; 
a = a.replace(/\s/g, sep); 

lub jako funkcja:

function numberFormat(_number, _sep) { 
    _number = typeof _number != "undefined" && _number > 0 ? _number : ""; 
    _number = _number.replace(new RegExp("^(\\d{" + (_number.length%3? _number.length%3:0) + "})(\\d{3})", "g"), "$1 $2").replace(/(\d{3})+?/gi, "$1 ").trim(); 
    if(typeof _sep != "undefined" && _sep != " ") { 
     _number = _number.replace(/\s/g, _sep); 
    } 
    return _number; 
} 
+1

Dzięki. Nie jest to czyste rozwiązanie CSS, ale spełnia zadanie! – Don

+0

Podoba mi się. Ale musiałem również przekonwertować liczbę na ciąg przed zamianą. Nie możesz wykonać zamiany na numerze. – Mardok

+0

przed wywołaniem '_number.replace' musimy upewnić się, że jest to ciąg taki jak ten ' _number = typeof _number! = "Undefined" && _number> 0? String (_number): ""; "albo otrzymasz komunikat o błędzie" _number.replace "nie jest zdefiniowany lub nie jest funkcją – Shalkam

7

Nie, trzeba użyć javascript raz to w DOM lub sformatować go poprzez swój język po stronie serwera (PHP/Ruby/Python etc.)

+4

Format liczb jest kwestią treści, podobnie jak treść treści lub inne kwestie notacyjne (np. Notacje daty, zależne od języka). Więc formatowanie liczb jest lokalizacją i powinno być obsługiwane podczas generowania treści. Robienie tego w JavaScript ma sens dla części treści generowanej przez JavaScript. –

+0

W pełni się z tym zgadzam. Dlatego napisałem to w mojej odpowiedzi. Powinienem prawdopodobnie położyć na to większy nacisk. – mreq

+0

Może to być treść lub prezentacja. Weź CSS 'rtl', który pokazuje tę samą treść w inny sposób: czy powinien być również traktowany po stronie serwera? – Don

2

Nie można użyć CSS do tego celu. Polecam korzystanie z JavaScript, jeśli jest to możliwe. Proszę spojrzeć na to, aby uzyskać więcej informacji: JavaScript equivalent to printf/string.format

Również As Petr wspomniał, że poradzisz sobie z tym po stronie serwera, ale to całkowicie zależy od twojego scenariusza.

2

Nie sądzę, że możesz. Możesz użyć number_format(), jeśli kodujesz w PHP. Inne języki programowania mają również funkcję formatowania liczb.

15

Prawdopodobnie najlepszym sposobem na to jest combo ustawienia rozpiętość z klasą oznaczający formatowanie następnie użyć jQuery .each zrobić formatowanie na przęseł gdy DOM jest ładowane ...

5

nie odpowiedź, ale perpopy zainteresowania. Wysłałem a proposal to the CSS WG kilka lat temu. Jednak nic się nie stało. Jeśli rzeczywiście (i dostawcy przeglądarek) postrzegaliby to jako prawdziwy problem deweloperski, być może piłka mogłaby zacząć się kręcić?

+2

Dzięki za przyczynienie się. Mam nadzieję, że pewnego dnia się uda. – adjenks

3

Jeśli to pomaga ...

korzystać z funkcji PHP number_format() i Narrow No-break Space ( ). Jest często używany jako jednoznaczny separator tysięcy.

echo number_format(200000, 0, "", " "); 

Bo IE8 ma pewne problemy, aby uczynić Narrow No-przerwa przestrzeń, zmieniłem go na SPAN

echo "<span class='number'>".number_format(200000, 0, "", "<span></span>")."</span>"; 
.number SPAN{ 
    padding: 0 1px; 
} 
+0

Niestety jest to po stronie serwera, istnieje niewielkie uderzenie procesora, potrzebujemy maski edycji html/css. Dressing i rendering powinny być stroną klienta, chyba że serwujemy plik pdf? – mckenzm

0

można użyć JSTL biblioteki znaczników do formatowania stron JSP

JSP Page 
//import the jstl lib 
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> 

<c:set var="balance" value="120000.2309" /> 
<p>Formatted Number (1): <fmt:formatNumber value="${balance}" 
     type="currency"/></p> 
<p>Formatted Number (2): <fmt:formatNumber type="number" 
     maxIntegerDigits="3" value="${balance}" /></p> 
<p>Formatted Number (3): <fmt:formatNumber type="number" 
     maxFractionDigits="3" value="${balance}" /></p> 
<p>Formatted Number (4): <fmt:formatNumber type="number" 
     groupingUsed="false" value="${balance}" /></p> 
<p>Formatted Number (5): <fmt:formatNumber type="percent" 
     maxIntegerDigits="3" value="${balance}" /></p> 
<p>Formatted Number (6): <fmt:formatNumber type="percent" 
     minFractionDigits="10" value="${balance}" /></p> 
<p>Formatted Number (7): <fmt:formatNumber type="percent" 
     maxIntegerDigits="3" value="${balance}" /></p> 
<p>Formatted Number (8): <fmt:formatNumber type="number" 
     pattern="###.###E0" value="${balance}" /></p> 

Wynik

sformatowany numer (1): 120,000.23 £

Sformatowana liczba (2): 000.231

Sformatowana liczba (3): 120,000.231

Sformatowana liczba (4): 120000.231

sformatowany numer (5): 023%

sformatowany numer (6): 12,000,023.0900000000%

sformatowany numer (7): 023%

sformatowany numer (8): 120E3

Powiązane problemy