سؤال

ولقد فتشت عن طريق البريد الإلكتروني (ربما أنا لا تبدو الصعب بما فيه الكفاية)، ولكن لم أتمكن من العثور على كيفية تشغيل Math.sqrt إلى عدد صحيح.

وأريد استخدام Math.sqrt لحلقة <ط> ل وأعتقد أنني في حاجة إليها باعتبارها كثافة العمليات لكنني لا يمكن أن يبدو لمعرفة كيفية يلقي النتيجة إلى int. فكيف أفعل ذلك؟

وحاولت شيئا من هذا القبيل إلى جاوة:

(int) Math.sqrt(num);

ولكن ذلك لم ينجح.

وشكرا مقدما:)

هل كانت مفيدة؟

المحلول

استخدم Math.round، Math.ceil، أو Math.floor تبعا للاحتياجات المحددة الخاصة بك التقريب.

"لتقريب الأرقام إلى أعداد صحيحة واحدة من Math.round، Math.ceil وMath.floor هي الأفضل، والنتيجة المرجوة التي يمكن التعبير عنها التوقيع على 32 بت عدد صحيح عملية أحادي المعامل هو موضح أدناه قد أيضا دعوى ".

- http://www.jibbering.com/faq/faq_notes/type_convert هتمل # tcNumber

نصائح أخرى

وأحدهم اقترح parseInt. الذي يذهب من سلسلة إلى int، ولكن من السهل لتحويل عدد عشري إلى سلسلة.

parseInt(Math.sqrt(num)+"")

وتذكر أنه بغض النظر عن ما تفعله، وجافا سكريبت دائما باستخدام عوامات. لا يوجد أي نوع عدد صحيح.

وMath.floor سوف نفعل ذلك. أشك في أنك تحتاج حتى للذهاب إلى عدد صحيح، وإن كان.

Math.floor(Math.sqrt(num));

وعن طريق parseInt(Math.sqrt(num)+"") أبطأ من استخدام Math.round(Math.sqrt(num)). أعتقد أنه لأن في المثال الأول كنت تقوم بإنشاء سلسلة، تحليل قيمة عددية من num والتقريب عليه. في المثال الثاني الذي تأخذ فقط int و حوله.

وأنا أعلم هذا هو السؤال القديم، ولكني حسبت على أي شخص العثور على هذا في وقت لاحق ....

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

Math.sqrt(2); //1.41......
~~Math.sqrt(2); //1

والسلبية المختصة بالبت مزدوجة تنخفض شيئا بعد العلامة العشرية. لقد قيل لي انها أسرع قليلا، ولكن أنا لست مقتنعا تماما.

وتحرير: كملاحظة هذا سوف جولة نحو 0

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top