Usuń przecinki z ciągu za pomocą JavaScript


97

Chcę usunąć przecinki z ciągu i obliczyć te kwoty za pomocą JavaScript.

Na przykład mam te dwie wartości:

  • 100.000,00
  • 500.000,00

Teraz chcę usunąć przecinki z tych ciągów i chcę sumę tych kwot.

Odpowiedzi:


172

Aby usunąć przecinki, musisz użyć replacena ciągu. Aby przekonwertować na liczbę zmiennoprzecinkową, aby móc wykonywać obliczenia matematyczne, potrzebujesz parseFloat:

var total = parseFloat('100,000.00'.replace(/,/g, '')) +
            parseFloat('500,000.00'.replace(/,/g, ''));

3
Tak, trzeba połączyć replacei parseFloat. oto przykład szybkiego testu: jsfiddle.net/TtYpH
Shadow Wizard is Ear For You

1
Jest rok 2017, czy nie ma sposobu, aby przejść do i z łańcucha ustawień regionalnych? Jak odwrócić tę funkcję? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . Opublikowałem osobne pytanie tutaj: stackoverflow.com/questions/41905406/…
Costa

4

Powiązana odpowiedź, ale jeśli chcesz wyczyścić użytkownika wprowadzającego wartości do formularza, oto co możesz zrobić:

const numFormatter = new Intl.NumberFormat('en-US', {
  style: "decimal",
  maximumFractionDigits: 2
})

// Good Inputs
parseFloat(numFormatter.format('1234').replace(/,/g,"")) // 1234
parseFloat(numFormatter.format('123').replace(/,/g,"")) // 123

// 3rd decimal place rounds to nearest
parseFloat(numFormatter.format('1234.233').replace(/,/g,"")); // 1234.23
parseFloat(numFormatter.format('1234.239').replace(/,/g,"")); // 1234.24

// Bad Inputs
parseFloat(numFormatter.format('1234.233a').replace(/,/g,"")); // NaN
parseFloat(numFormatter.format('$1234.23').replace(/,/g,"")); // NaN

// Edge Cases
parseFloat(numFormatter.format(true).replace(/,/g,"")) // 1
parseFloat(numFormatter.format(false).replace(/,/g,"")) // 0
parseFloat(numFormatter.format(NaN).replace(/,/g,"")) // NaN

Użyj daty międzynarodowej lokalnie przez format. Spowoduje to wyczyszczenie wszelkich złych danych wejściowych, a jeśli takie istnieją, zwraca ciąg znaków, NaNktóre można sprawdzić. Obecnie nie ma możliwości usunięcia przecinków jako części ustawień regionalnych (od 10/12/19) , więc możesz użyć polecenia regex, aby usunąć przecinki za pomocą replace.

ParseFloat konwertuje definicję tego typu z ciągu na liczbę

Jeśli używasz Reacta, tak może wyglądać Twoja funkcja obliczeniowa:

updateCalculationInput = (e) => {
    let value;
    value = numFormatter.format(e.target.value); // 123,456.78 - 3rd decimal rounds to nearest number as expected
    if(value === 'NaN') return; // locale returns string of NaN if fail
    value = value.replace(/,/g, ""); // remove commas
    value = parseFloat(value); // now parse to float should always be clean input

    // Do the actual math and setState calls here
}
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.