parsing العمليات - كيفية تحويل السلسلة إلى تعويم في JavaScript؟




الحسابية الجافا (7)

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

سيعود هذا فقط 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(",","."))

أحاول تحليل قيمتين من 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"

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

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

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

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;
    }

هل سبق لك أن حاولت القيام بذلك؟ : ع

var str = '3.8';ie
alert( +(str) + 0.2 );

+ (سلسلة) سوف يلقي سلسلة في تعويم.

مفيد!

لذلك من أجل حل مشكلتك ، يمكنك القيام بشيء كالتالي:

var floatValue = +(str.replace(/,/,'.'));

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


يمكن أن يساعدك محلل YAML معرفة نوع البيانات الخاصة بك. استخدم yaml.load() ، ثم يمكنك استخدام type(result) لاختبار النوع:

>>> import yaml

>>> a = "545.2222"
>>> result = yaml.load(a)
>>> result
545.22220000000004
>>> type(result)
<type 'float'>

>>> b = "31"
>>> result = yaml.load(b)
>>> result
31
>>> type(result)
<type 'int'>

>>> c = "HI"
>>> result = yaml.load(c)
>>> result
'HI'
>>> type(result)
<type 'str'>






javascript parsing floating-point