dodaj przecinki do liczby w jQuery


83

Mam te numery

10999i 8094i456

Chcę tylko dodać przecinek we właściwym miejscu, jeśli tego potrzebuje, więc wygląda to tak

10,999i 8,094i456

Wszystkie znajdują się w tagu ap, takim jak ten <p class="points">10999</p>itp.

Czy da się to zrobić?

Próbowałem tego tutaj z pomocą innych postów http://jsfiddle.net/pdWTU/1/, ale nie wydaje się, żebym to działał

Dzięki

Jamie

AKTUALIZACJA

Trochę pomieszane i udało mi się to rozgryźć tutaj http://jsfiddle.net/W5jwY/1/

Przyjrzymy się nowej wtyczce Globalizacja, aby lepiej to zrobić

Dzięki

Jamie



3
+1 za twoje skrzypce. Powinieneś dołączyć swoje rozwiązanie do aktualizacji:<number string>.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')
zhon

2
Chciałbym móc +100 za twoje rozwiązanie: Regex mówiący Brak granicy słowa, po którym następuje pozytywne spojrzenie przed 3 cyfry, prawdopodobnie powtórzone, a nie poprzedzone cyfrą. Niesamowite!
zhon

To rozwiązanie było w większości najlepsze, ale mi się nie udało. Niestety muszę wyświetlać liczby z 4, a czasem 5 miejscami po przecinku. Ludzie, dla których pracuję, zajmują się dużą liczbą transakcji i ułamkami pensa, sumując się do 100 dolarów lub 1000 dolarów (pomyśl o przestrzeni biurowej). Właśnie włożyłem jakiś kod na twoje skrzypce, aby umożliwić obsługę miejsc dziesiętnych po 3: http://jsfiddle.net/W5jwY/554/
Josh Bilderback

Prawdziwa odpowiedź na to pytanie tutaj: stackoverflow.com/a/2632502/1860982
Tosin Onikute

Odpowiedzi:


138

Działa na wszystkich przeglądarkach, to wszystko, czego potrzebujesz.

  function commaSeparateNumber(val){
    while (/(\d+)(\d{3})/.test(val.toString())){
      val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
    }
    return val;
  }

Napisał to jako zwięzłe i na temat dzięki regex. To jest prosty JS, ale możesz go użyć w swoim jQuery w następujący sposób:

$('#elementID').html(commaSeparateNumber(1234567890));

lub

$('#inputID').val(commaSeparateNumber(1234567890));

4
Odpowiedź użytkownika1655655 jest o wiele lepsza
Pyrolistic

7
Dwa problemy z tą odpowiedzią: 1. Wywołanie funkcji więcej niż jeden raz z tą samą wartością spowoduje wstawienie przecinków w niewłaściwych miejscach (na przykład zdarzenia keyup). 2. Ta funkcja nie obsługuje prawidłowo liczb dziesiętnych i dodaje przecinki wewnątrz miejsc po przecinku. Zobacz ten JSFiddle dla zmodyfikowanej wersji, która naprawia oba.
baacke

1
@baacke Ideą tej funkcji jest bycie szczupłym, więc nie uwzględniłem wywołania jej dwa razy na tej samej zmiennej lub ułamkach dziesiętnych (ponieważ nie było tego w pytaniu). Tak czy inaczej, Twój przykład skrzypiec jest przydatny w przypadkach, w których potrzebujesz ułamka dziesiętnego, więc dziękuję.
Timothy Perez

Miejsce, w którym pojawia się przecinek lub kropka, zależy od ustawień regionalnych. Biblioteka standardowa JS może już to zrobić za Ciebie. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Alex Harvey

130
Number(10000).toLocaleString('en');  // "10,000"

6
To najprostsze rozwiązanie i dla mnie działa idealnie. Dziękuję Ci!
ahgood

3
dziękuję za tę wskazówkę, znacznie lepszą niż pisanie niestandardowych funkcji lub dołączanie wtyczki. dla mnie odpowiedź nr 1!
linqu

5
To jest świetne i działa w większości przeglądarek na komputery stacjonarne, ale uważaj, że w tej chwili jest ograniczone wsparcie w przeglądarkach mobilnych ... developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
Luke

2
Dla każdego, kto chce użyć tego z Node.js, nie zadziała, chyba że ponownie skompilujesz silnik v8, aby uwzględnić i18n: stackoverflow.com/questions/23571043/ ...
Tom Spencer

3
Jest to niespójne między przeglądarkami i w ogóle nie działa na iPadzie.
Isaac Askew,

3

Odpowiedź Timothy'ego Pireza była bardzo poprawna, ale jeśli chcesz zamienić liczby przecinkami Natychmiast, gdy użytkownik wpisuje w polu tekstowym, możesz użyć funkcji Keyup.

      $('#textfield').live('keyup', function (event) {
        var value=$('#textfield').val();

      if(event.which >= 37 && event.which <= 40){
          event.preventDefault();
      }
      var newvalue=value.replace(/,/g, '');   
      var valuewithcomma=Number(newvalue).toLocaleString('en');   
      $('#textfield').val(valuewithcomma); 

      });

    <form><input type="text" id="textfield" ></form>



1
    function delimitNumbers(str) {
      return (str + "").replace(/\b(\d+)((\.\d+)*)\b/g, function(a, b, c) {
        return (b.charAt(0) > 0 && !(c || ".").lastIndexOf(".") ? b.replace(/(\d)(?=(\d{3})+$)/g, "$1,") : b) + c;
      });
    }

    alert(delimitNumbers(1234567890));


0

Korzystanie z referencji toLocaleString na https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

function formatComma(value, sep = 0) {
      return Number(value).toLocaleString("ja-JP", { style: "currency", currency: "JPY", minimumFractionDigits: sep });
    }
console.log(formatComma(123456789, 2)); // ¥123,456,789.00
console.log(formatComma(123456789, 0)); // ¥123,456,789
console.log(formatComma(1234, 0)); // ¥1,234


-1

inne podejście:

function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}
var a  = addCommas(10000.00);
alert(a);

Kolejna niesamowita wtyczka: http://www.teamdf.com/web/jquery-number-format/178/


-1

Inny sposób na zrobienie tego:

function addCommas(n){
  var s = "",
      r;

  while (n) {
    r = n % 1000;
    s = r + s;
    n = (n - r)/1000;
    s = (n ? "," : "") + s;
  }

  return s;
}

alert(addCommas(12345678));

-1

Oto moja wersja coffeescript skrzypiec @ baacke podana w komentarzu do @Timothy Perez

class Helpers
    @intComma: (number) ->
        # remove any existing commas
        comma = /,/g
        val = number.toString().replace comma, ''

        # separate the decimals
        valSplit = val.split '.'

        integer = valSplit[0].toString()
        expression = /(\d+)(\d{3})/
        while expression.test(integer)
            withComma = "$1,$2"
            integer = integer.toString().replace expression, withComma

        # recombine with decimals if any
        val = integer
        if valSplit.length == 2
            val = "#{val}.#{valSplit[1]}"

        return val
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.