2012-12-28 9 views
12

Używam następującej funkcji do formatowania liczb jako typów użytkowników. Wstawi przecinek co 3 cyfry. Przykład: 45696.36 stanie się 45,696.36.jQuery funkcja do formatowania liczb przecinkami i cyframi dziesiętnymi

Jednak mam z tym problem. Jeśli liczby po przecinku są dłuższe niż 3 cyfry, zaczyna się dodawanie do nich przecinków. Np .: 1136.6696 staje się 1,136.6,696.

To jest moja funkcja:

$.fn.digits = function(){ 
    return this.each(function() { 
    $(this).val($(this).val().replace(/[^0-9.-]/g, '')); 
    $(this).val($(this).val().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
    }) 
} 

Jak mogę rozwiązać ten problem tak, że zatrzymuje się umieszczenie po przecinku przecinki? Używam jQuery 1.8. Dzięki!

+0

Lepsze rozwiązanie: http://stackoverflow.com/a/1867641 9/21838 – Pyrolistical

Odpowiedz

39

Można by to osiągnąć poprzez podzielenie swój ciąg na znak „.”, a następnie wykonując swoją przecinkami konwersję tylko na pierwszej sekcji, jako takich:

function ReplaceNumberWithCommas(yourNumber) { 
    //Seperates the components of the number 
    var n= yourNumber.toString().split("."); 
    //Comma-fies the first part 
    n[0] = n[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
    //Combines the two sections 
    return n.join("."); 
} 

ReplaceNumberWithCommas(1136.6696); //yields 1,136.6696 

Example

+0

dang, to miłe wyrażenie. Ostatnim razem, kiedy to rozwiązałem, zakończyłem dzielenie ciągu _again_, aby go odwrócić, wstawić przecinki do tablicy i połączyć ponownie. – Mathletics

+0

To działało idealnie. Dzięki! – Jeff

+0

Jeśli używasz tego z walutą - która nie zawsze ma dziesiętne - dodanie do Twojego numeru numeru = numerNumer.to Naprawiono (2) powoduje, że zawsze pokazuje dziesiętne, nawet jeśli są one 0 –

Powiązane problemy