SORU
24 Mayıs 2010, PAZARTESİ


Nasıl binlerce JavaScript ayırıcısı olarak virgül ile numarasını Yazdır

Binlerce ayırıcı olarak virgül ile JavaScript bir tamsayı yazdırmaya çalışıyorum. Örneğin, sayı 1234567 göstermek istiyorum "1,234,567". Bunu nasıl yapıyor hakkında gitmek istiyorsunuz?

Yapıyorum.

function numberWithCommas(x) {
    x = x.toString();
    var pattern = /(-?\d )(\d{3})/;
    while (pattern.test(x))
        x = x.replace(pattern, "$1,$2");
    return x;
}

Daha basit ya da daha zarif bir yolu var mı? Eğer yüzer de çalışır eğer iyi olurdu, ama buna gerek yok. Bölgeye özgü dönemleri, virgül arasında karar vermeye gerek yok.

CEVAP
25 Mayıs 2010, Salı


Kerry'nin cevap, ama sadece basit bir şey arıyordum bu yana basitleştirilmiş benim belirli bir amaç için, bu fikri kullandım. Yaptığım şey burada:

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3}) (?!\d))/g, ",");
}

Bu gerçekten bilmek lazım.

@Bom, normal ifadenin nasıl çalıştığını sordu Neil. Benim açıklamam uzun olur. Yorum uymayacak ve burada bunu yapıyorum böylece nereye koyacağımı bilmiyorum. Eğer herkes nereye sokacağını için başka önerileriniz varsa, lütfen bana bildirin.

Normal ifade kullanan 2 ilerleme onaylamaları: olumlu bakmak için her noktada dize sahip birden fazla 3 haneli bir satır sonra, ve bir negatif onaylama işlemi yapmak için, bu sadece tam bir çoklu 3 haneli. Yedek ifadeyi orada bir virgül koyar.

Örneğin, pas "123456789.01", pozitif onaylama işlemi olacak maç her nokta için sol 7 (beri "789" katı olan 3 basamaklı, "678" katı olan 3 basamaklı, "567", vb.). Olumsuz iddiasıyla 3 basamak birden sonra herhangi bir rakam olmadığını denetler. "789" çok sonra bir nokta var, tam 3 basamak birden, bir virgül de oraya gidiyor. "678 3 basamak birden çok ama bir şey var" "9, yani bu 3 basamak 4, ve bir virgül, bir grubun parçası sonra" oraya gitmez. "567". benzer için "456789 3, virgül katı olan 6 rakamı," o önce gider. "345678" var, ancak 3 katı bir "9 virgül var gider" sonra. Ve benzeri. "\B" dize başında bir virgül koyarak normal ifade ediyor.

@neu-rah bu işlev, eğer 3'den fazla basamak varsa orada istenmeyen yerlerde virgül ekler belirtilen ondalık noktadan sonra. Eğer bu bir sorun ise, bu işlevi kullanabilirsiniz:

function numberWithCommas(x) {
    var parts = x.toString().split(".");
    parts[0] = parts[0].replace(/\B(?=(\d{3}) (?!\d))/g, ",");
    return parts.join(".");
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chickenby

    chickenby

    2 HAZİRAN 2008
  • Moodle

    Moodle

    11 Mayıs 2010
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009