javascript - سكريبت - شرح جافا سكربت بالعربي pdf




كيفية تحويل السلسلة إلى تعويم في JavaScript؟ (5)

GusDeCool أو أي شخص آخر يحاول استبدال أكثر من واحد الآلاف من الفواصل ، طريقة واحدة للقيام بذلك هي استبدال عالمي regex: /foo/g . فقط تذكر ذلك . هو حرف أول ، لذلك يجب عليك الهروب منه أو وضعه بين قوسين ( \. أو [.] ). إليك خيار واحد:

var str = '6.000.000';
str.replace(/[.]/g,",");

أحاول تحليل قيمتين من datagrid.
الحقول رقمية ، وعندما يكون لديهم فاصلة (مثل 554،20) ، لا أستطيع الحصول على الأرقام بعد الفاصلة.
لقد حاولت parseInt و parseFloat . كيف يمكنني أن أفعل هذا؟


إذا قمت بتوسيع كائن سلسلة مثل هذا ..

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

.. يمكنك تشغيله هكذا

"554,20".float()
> 554.20

يعمل مع نقطة كذلك

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

استبدل الفاصلة بنقطة.

سيعود هذا فقط 554:

var value = parseFloat("554,20")

هذا سيعود 554.20:

var value = parseFloat("554.20")

في النهاية ، يمكنك ببساطة استخدام:

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

لا تنس أنه يجب استخدام parseInt() فقط لتحليل الأعداد الصحيحة (لا توجد نقاط عائمة). في حالتك ستعود فقط 554. بالإضافة إلى ذلك ، استدعاء parseInt () على تعويم لن تقريب الرقم: سوف يستغرق الكلمة الخاصة به (أقرب عدد صحيح أقل).

المثال الموسع للإجابة على سؤال بيدرو فيريرا من التعليقات:

إذا كان 1.234.567,99 يحتوي على آلاف نقاط فاصل مثل في 1.234.567,99 يمكن التخلص من تلك النقاط مسبقًا مع replace آخر:

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))

كان لي نفس المشكلة إلا أنني لم أكن أعرف مسبقا ما كانت الفواصل الآلاف والفاصل العشري. انتهيت من كتابة مكتبة للقيام بذلك. إذا كنت مهتما هنا هو: https://github.com/GuillaumeLeclerc/number-parsing


يمكنك استخدام هذه الوظيفة. ستحل محل الفواصل مع '' ومن ثم سيتم تحليل القيمة وبعد ذلك سيتم ضبط الفواصل في القيمة مرة أخرى.

function convertToFloat(val) {
        if (val != '') {
            if (val.indexOf(',') !== -1)
                val.replace(',', '');
            val = parseFloat(val);
            while (/(\d+)(\d{3})/.test(val.toString())) {
                val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
            }
        }
        return val;
    }




floating-point