CSS ile sayıları biçimlendirme (ondalık basamaklar, binlik ayırıcılar, vb.)


121

Sayıları CSS ile biçimlendirmek mümkün mü? Yani: ondalık basamaklar, ondalık ayırıcı, binlik ayırıcı vb.


61
Yapamazsın ama gerçekten yapabilmelisin. Sonuçta, 50.000 veya 50000 veya 50.000.00 hepsi aynı 'verilerdir, sadece farklı bir şekilde sunulurlar ki bu da CSS içindir.
punkrockbuddyholly

4
@MrMisterMan: Burada fırlatılan bazı fikirler var: wiki.csswg.org/ideas/content-formatting#numbers Muhtemelen tacize uğrayacağım ve "spesifikasyonlara" atıfta bulunmakla ve yine de herkesin umutlarını yükseltmekle suçlanacağım. Ve benim için sayısal olmayan metnin burada nasıl işleneceğini merak ediyorum.
BoltClock

3
Buna sahip olmanın iyi olacağını kabul etmeme rağmen, numara başka türlü yerelleştirilmiş bir sayfanın içine yerleştirilmiştir. Yani, sayfanın geri kalanı İngilizce, Çince veya başka bir dildir ve numaralar IMO'nun bu yerelleştirmeye uygun olması gerekir. Neden sayfanın geri kalanından ayrı olarak yerelleştirilmeleri gerekir ...?
deceze

@deceze: Haklısın. "Yerelleştirme CSS" lerine sahip olmak mümkün olmalıdır
Don

1
Intl.NumberFormat kullanarak JS seçeneği ekleme mdn -ref:
Joshua Baboo

Yanıtlar:




23

Peki, Javascript'teki herhangi bir sayı için bir sonrakini kullanıyorum:

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();

ve virgül olarak başka bir ayırıcı kullanmanız gerekirse, örneğin:

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

veya bir işlev olarak:

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
Teşekkürler. Saf bir CSS çözümü değil, ama görevi yapıyor!
Don

Bunu sevdim. Ancak, değiştirmeden önce sayıyı bir dizeye dönüştürmem gerekiyordu. Bir numarayı değiştiremezsiniz.
Mardok

aramadan önce _number.replacebunun gibi bir dizge olduğundan emin olmalıyız yoksa tanımlanmamış veya işlevsiz _number = typeof _number != "undefined" && _number > 0 ? String(_number) : "";bir hata alırsınız_number.replace
Shalkam

3
neden sadece: (123456789) .toLocaleString ('en-GB') veya benzerini kullanmıyorsunuz?
Joehannes

16

Muhtemelen bunu yapmanın en iyi yolu, biçimlendirmenizi belirten bir sınıfla bir yayılma ayarlamadan sonra DOM yüklendiğinde aralıklar üzerinde biçimlendirme yapmak için Jquery .each'i kullanmaktır ...


9

Hayır, DOM'a girdikten sonra javascript kullanmanız veya dil sunucusu tarafında (PHP / ruby ​​/ python vb.) Biçimlendirmeniz gerekir.


5
Sayıların formatı, içeriğin metni veya diğer temsili konular gibi bir içerik meselesidir (örneğin, dile bağlı olan tarih notasyonları). Dolayısıyla biçimlendirme numaraları yerelleştirmedir ve içerik oluşturulduğunda ele alınmalıdır. Bunu JavaScript'te yapmak, içeriğin JavaScript tarafından oluşturulan kısmı için anlamlıdır.
Jukka K. Korpela

Buna tamamen katılıyorum. Bu yüzden cevabıma yazdım. Muhtemelen daha fazla stres yapmalıydı.
mreq

İçerik veya sunum olabilir. rtlAynı içeriği farklı bir şekilde gösteren CSS'yi ele alalım : sunucu tarafında da ele alınmalı mı?
Don

6

Bir cevap değil, ama ilgi çekici şeyler. Birkaç yıl önce CSS Çalışma Grubu'na bir teklif gönderdim . Ancak hiçbir şey olmadı. Gerçekten onlar (ve tarayıcı satıcıları) bunu gerçek bir geliştirici endişesi olarak görürlerse, belki de top yuvarlanmaya başlayabilir mi?


2
Katkıda bulunduğunuz için teşekkürler. Umarım bir gün yakalar.
ADJenks

4

Yardımı dokunursa ...

PHP işlevini number_format()ve Dar Bölünmez Boşluğu kullanıyorum (  ) kullanıyorum. Genellikle, kesin olmayan binlik ayırıcı olarak kullanılır.

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

IE8'in Dar Bölünmez Alanı oluşturmak için bazı sorunları olduğundan, onu bir SPAN için değiştirdim

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

Ne yazık ki bu sunucu tarafı, hafif bir CPU vuruşu var, html / css düzenleme maskesi yeteneğine ihtiyacımız var. Bir pdf sunmadığımız sürece giyinme ve işleme müşteri tarafında olmalıdır?
mckenzm


2

Yapabileceğini sanmıyorum. PHP'de kod yazıyorsanız number_format () kullanabilirsiniz . Ve diğer programlama dillerinin de sayıları biçimlendirme işlevi vardır.


"Arka uçta" görüntüleme amacıyla verileri değiştirmek için KÖTÜ uygulama.
Buffalo

1

JSP Sayfalarını biçimlendirmek için Jstl etiket Kitaplığını kullanabilirsiniz

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>

Sonuç

Biçimlendirilmiş Numara (1): 120.000,23 £

Biçimlendirilmiş Sayı (2): 000.231

Biçimlendirilmiş Sayı (3): 120,000.231

Biçimlendirilmiş Sayı (4): 120000.231

Biçimlendirilmiş Sayı (5):% 023

Biçimlendirilmiş Sayı (6): 12.000,023.0900000000%

Biçimlendirilmiş Sayı (7):% 023

Biçimlendirilmiş Sayı (8): 120E3

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.