جافاسكريبت - كيف نحول سلسلة نصية إلى رقم في تايب سكريبت؟


بالنظر إلى تمثيل نصي لرقم، كيف يمكنني تحويله إلى نوع number في TypeScript؟

var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;

الإجابة رقم 1

تمامًا كما في جافا سكريبت، يمكنك استخدام دالتي parseInt أو parseFloat، أو ببساطة استخدام العامل الأحادي +:

var x = "32";
var y: number = +x;

جميع التقنيات المذكورة سيكون لها كتابة صحيحة وسوف تقوم بتحليل سلاسل الأعداد الصحيحة العشرية البسيطة بشكل صحيح مثل "123"، لكنها ستتصرف بشكل مختلف في حالات أخرى مختلفة، وربما متوقعة، (مثل "123.45") وفي الحالات الطرفية مثل null.

الإجابة رقم 2

الطريقة في TypeScript للقيام بذلك ستكون:

Number('1234') // 1234
Number('9BX9') // NaN

كما تم الرد هنا: https://stackoverflow.com/a/23440948/2083492

الإجابة رقم 3

لأصدقائنا من مستخدمي Angular:

ضمن القالب، Number(x) و parseInt(x) تُثير خطأ، و +x ليس له أي تأثير. التحويل الصحيح سيكون x*1 أو x/1.

الإجابة رقم 4

كما أوضحت إجابات أخرى هنا، هناك طرق متعددة لإجراء التحويل:

Number('123');
+'123';
parseInt('123');
parseFloat('123.45')

أود أن أذكر شيئًا آخر عن parseInt مع ذلك.

عند استخدام parseInt، من المنطقي دائمًا تمرير معامل الأساس. للتحويل العشري، يكون ذلك 10. هذه هي القيمة الافتراضية للمعامل، ولهذا السبب يمكن تجاهلها. بالنسبة للنظام الثنائي، فهو 2 وللنظام الست عشري، فهو 16. في الواقع، أي أساس بين 2 و36 بما في ذلك الاثنين يعمل.

parseInt('123')         // 123 (don't do this)
parseInt('123', 10)     // 123 (much better)

parseInt('1101', 2)     // 13
parseInt('0xfae3', 16)  // 64227

في بعض تنفيذات جافاسكريبت، parseInt يحلل الأصفار البادئة على أنها ثمانيةية:

على الرغم من أن ECMAScript 3 يثني عن ذلك وECMAScript 5 يحظره، فإن العديد من التطبيقات تفسر السلسلة الرقمية التي تبدأ بصفر بادئ كأوكتال. قد تكون النتيجة التالية بأوكتال، أو قد تكون بالعشري. حدد دائمًا الأساس لتجنب هذا السلوك غير الموثوق به.

— MDN

حقيقة أن الكود يصبح أوضح هي تأثير جانبي جيد لتحديد معامل الأساس.

نظرًا لأن parseFloat يقوم بتحليل التعابير الرقمية بالأساس 10 فقط، فلا حاجة لمعلمة الأساس هنا.

المزيد عن هذا:

  • لماذا نحتاج إلى استخدام القاعدة؟ (سؤال على Stack Overflow)
  • إذن أجب على "ما الفرق بين parseInt() و Number()?"

الإجابة رقم 5

موضحًا ما قاله رايان، يتبنى TypeScript التعابير الاصطلاحية لجافا سكريبت بشكل عام.

var n = +"1"; // the unary + converts to number
var b = !!"2"; // the !! converts truthy to true, and falsy to false
var s = ""+3; // the ""+ converts to string via toString()

جميع التفاصيل المثيرة والمفصلة حول تحويل نوع جافا سكريبت.

الإجابة رقم 6

تحويل السلسلة إلى رقم:

في تايب سكريبت، نقوم بتحويل سلسلة نصية إلى رقم بالطرق التالية:

  • parseInt(): هذه الدالة تأخذ وسيطين، الأول هو سلسلة ليتم تحويلها إلى عدد صحيح. الثاني هو القاعدة (الأساس في أنظمة الأعداد الرياضية، مثلاً 10 للعشري و2 للثنائي). ثم تُرجع العدد الصحيح، إذا لم يمكن تحويل الحرف الأول إلى عدد، سيتم إرجاع NaN.
  • parseFloat(): يأخذ كوسيط القيمة التي نريد تحليلها، ويعيد عدداً عشرياً. إذا لم يمكن تحويل القيمة إلى رقم، يتم إرجاع NaN.
  • عامل +: العامل عند استخدامه بشكل مناسب يمكن أن يجبر قيمة نصية على التحول إلى رقم.

أمثلة:

/*    parseInt   */

// note that a whole number is returned, so it will round the number
console.log(parseInt('51.023124'));

// parseInt will 'cut off' any part of the string which is not a number
console.log(parseInt('5adfe1234'));

// When the string starts with non number NaN is returned
console.log(parseInt('z123'));

console.log('--------');

/*    parseFloat   */

// parses the string into a number and keeping the precision of the number
console.log(typeof parseFloat('1.12321423'));

// parseFloat will 'cut off' any part of the string which is not a number
console.log(parseFloat('5.5abc'));

console.log('--------');

/*   + operator   */

let myString = '12345'

console.log(typeof +myString);

let myOtherString = '10ab'

// + operator will not cut off any 'non number' string part and will return NaN
console.log(+myOtherString);

أيّهما تستخدم؟

  1. استخدم parseInt() عندما تريد تحويل سلسلة إلى عدد صحيح. ومع ذلك، يظل نوع البيانات عشريًا، حيث أن جميع قيم الأرقام هي قيم عشرية في TS. استخدم هذه الطريقة أيضًا عندما تحتاج إلى تحديد قاعدة الرقم الذي تريد تحويله.
  2. استخدم parseFloat() عندما تحتاج إلى تحويل سلسلة إلى عدد عشري.
  3. يمكنك استخدام العامل + قبل سلسلة لتحويلها إلى عدد عشري. ميزة هذا هو أن الصياغة قصيرة جدًا.

الإجابة رقم 7

أسهل طريقة هي استخدام +strVal أو Number(strVal)

أمثلة:

let strVal1 = "123.5"
let strVal2 = "One"
let val1a = +strVal1
let val1b = Number(strVal1)
let val1c = parseFloat(strVal1)
let val1d = parseInt(strVal1)
let val1e = +strVal1 - parseInt(strVal1)
let val2a = +strVal2

console.log("val1a->", val1a) // 123.5
console.log("val1b->", val1b) // 123.5
console.log("val1c->", val1c) // 123.5
console.log("val1d->", val1d) // 123
console.log("val1e->", val1e) // 0.5
console.log("val2a->", val2a) // NaN

الإجابة رقم 8

يمكنك اتباع أي من الطريقتين التاليتين.

var str = '54';

var num = +str; //easy way by using + operator
var num = parseInt(str); //by using the parseInt operation