إزالة الفواصل من السلسلة باستخدام جافاسكريبت
أريد إزالة الفواصل من السلسلة وحساب هذا المبلغ باستخدام جافاسكريبت.
على سبيل المثال، لدي هاتان القيمتان:
- 100,000.00
- 500,000.00
الآن أريد إزالة الفواصل من تلك السلاسل وأريد إجمالي تلك المبالغ.
الإجابة رقم 1
لإزالة الفواصل، ستحتاج إلى استخدام replace على السلسلة. لتحويلها إلى عدد عشري حتى تتمكن من القيام بالعمليات الحسابية، ستحتاج إلى parseFloat:
var total = parseFloat('100,000.00'.replace(/,/g, '')) +
parseFloat('500,000.00'.replace(/,/g, ''));
الإجابة رقم 2
إجابة ذات صلة، ولكن إذا كنت تريد تنظيف إدخال المستخدم للقيم في نموذج، فإليك ما يمكنك فعله:
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
استخدم تاريخ الموقع الدولي عبر format. هذا ينظف أي مدخلات خاطئة، وإذا كان هناك إدخال خاطئ فإنه يعيد سلسلة NaN يمكنك التحقق منها. لا توجد حالياً طريقة لإزالة الفواصل كجزء من إعدادات الموقع (اعتباراً من 12/10/19)، لذا يمكنك استخدام أمر regex لإزالة الفواصل باستخدام replace.
ParseFloat يحول هذا التعريف النوعي من سلسلة إلى رقم
إذا كنت تستخدم React، فهكذا قد تبدو دالة الحساب الخاصة بك:
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
}
