জাভাস্ক্রিপ্ট বাকি সঙ্গে পূর্ণসংখ্যা বিভাগ?


929

ইন জাভাস্ক্রিপ্ট , আমি পেতে পারি:

  1. প্রদত্ত পূর্ণসংখ্যা বারের পুরো সংখ্যাটি অন্যটিতে যায়?
  2. বাকিটা?

উত্তর:


1239

কিছু সংখ্যক yএবং কিছু বিভাজকের xজন্য ভাগফল ( quotient) এবং বাকী ( remainder) কে গণনা করুন :

var quotient = Math.floor(y/x);
var remainder = y % x;

84
% জাভাস্ক্রিপ্টে ভাসমান কাজ করে (এটি অন্যান্য অনেক ভাষা থেকে পৃথক), যা সম্ভবত পছন্দসই নয়: 3.5 % 21.5 এর মূল্যায়ন করে। প্রয়োজনীয় হিসাবে হ্যান্ডেল (পার্সেন্ট, ফ্লোর, ইত্যাদি) নিশ্চিত করুন

16
গণিতে -4.5 এর অবিচ্ছেদ্য অংশ -5, কারণ -5 হ'ল "সর্বোচ্চ সম্ভাব্য অবিচ্ছেদ্য সংখ্যা যা এখনও -4.5 এর চেয়ে কম"।
শক্তিশালী

9
যাইহোক, আপনি নেতিবাচক সংখ্যাগুলি সম্পর্কে যা কিছু সিদ্ধান্ত নেবেন না কেন এটি ভাগফল এবং বাকী অংশগুলির মধ্যে সামঞ্জস্যপূর্ণ হওয়া উচিত। একসাথে ব্যবহার floorএবং %একসাথে এইভাবে সামঞ্জস্যপূর্ণ নয়। হয় (এর ফলে নেতিবাচক অবশিষ্টদের অনুমতি দেওয়া) truncএর পরিবর্তে ব্যবহার করুন floorবা বাকীটি পেতে ( rem = y - div * x) বিয়োগফল ব্যবহার করুন ।
মার্ক রিড

7
1. আপনি বাকি গনা চলুন remযাই হোক, আপনি ভাগফল পেতে পারেন divদ্রুত মেঝে ছাড়া: (y - rem) / x। 2. পথ ডোনাল্ড Knuth এর প্রস্তাবিত সংজ্ঞা দ্বারা মডিউল অপারেশন (সাইন-ম্যাচ-ভাজক, না বাকি অর্থাত ইউক্লিডিয় মডুলাস, কিংবা জাভাস্ক্রিপ্ট সাইন-ম্যাচ-লভ্যাংশ) কীসের আমরা যত জাভাস্ক্রিপ্ট কোড করতে পারেন হয় function mod (a, n) { return a % n + (Math.sign(a) !== Math.sign(n) ? n : 0); }
অ্যারন ম্যানশিম

1
-9 / 2 = -4.5। তারপরে আপনি -4.5 ফ্লোর নিন, যা -5 হয়। মনে রাখবেন যে -5 -4.5-এর চেয়ে কম এবং ফ্লোর অপারেশন প্রদত্ত মানের চেয়ে কম বৃহত্তম পূর্ণসংখ্যা হিসাবে সংজ্ঞায়িত হয়েছে।
মার্ক রিড

370

আমি বিটওয়াইজ অপারেটরগুলির বিশেষজ্ঞ নই, তবে পুরো নম্বরটি পাওয়ার আরও একটি উপায় এখানে রয়েছে:

var num = ~~(a / b);

এটি negativeণাত্মক সংখ্যার জন্যও সঠিকভাবে কাজ করবে, অন্যদিকে Math.floor()ভুল দিক দিয়ে চলেছে।

এটিও সঠিক বলে মনে হচ্ছে:

var num = (a / b) >> 0;

84
আর একটি, যার উদ্দেশ্য আমি মাত্র 20 a/b | 0
মিনিটটি

18
@ ব্যবহারকারী ১১৩37১16 @ ব্লু রাজা বিটওয়াইজ অপারেশনগুলি কেবলমাত্র পূর্ণসংখ্যার ধরণের উপর ভিত্তি করে তৈরি হয় এবং জেএস (অবশ্যই) এটি জানে। ~~int, int | 0এবং int >> 0প্রাথমিক যুক্তি সংশোধন করে না, তবে দোভাষীকে অপারেটরের কাছে অবিচ্ছেদ্য অংশ করুন।
আলেকসি জাব্রডস্কিই

15
floorখুব সহজেই ভুল দিকে গোল করে, এর নাম দেওয়া হয়েছে - মানুষ সাধারণত যে দিকটি চায় তা কেবল নয়!
কে কে কোয়ান

19
এটি একটি বু বু। a = 12447132275286670000; b = 128 Math.floor(a/b)-> 97243220900677100এবং ~~(a/b)-> -1231452688
মিরেক রুসিন

7
প্রাধান্য দিয়ে সতর্ক হন। ~~(5/2) --> 2যেমন করে (5/2)>>0 --> 2, কিন্তু ~~(5/2) + 1 --> 3, যখন ~~(5/2)>>0 + 1 --> 1~~অগ্রাধিকার আরও উপযুক্ত কারণ একটি ভাল পছন্দ।
টিমকেয়ে

217

আমি ফায়ারফক্সে কিছু গতি পরীক্ষা করেছি।

-100/3             // -33.33..., 0.3663 millisec
Math.floor(-100/3) // -34,       0.5016 millisec
~~(-100/3)         // -33,       0.3619 millisec
(-100/3>>0)        // -33,       0.3632 millisec
(-100/3|0)         // -33,       0.3856 millisec
(-100-(-100%3))/3  // -33,       0.3591 millisec

/* a=-100, b=3 */
a/b                // -33.33..., 0.4863 millisec
Math.floor(a/b)    // -34,       0.6019 millisec
~~(a/b)            // -33,       0.5148 millisec
(a/b>>0)           // -33,       0.5048 millisec
(a/b|0)            // -33,       0.5078 millisec
(a-(a%b))/b        // -33,       0.6649 millisec

উপরোক্ত প্রতিটি জন্য 10 মিলিয়ন ট্রায়াল উপর ভিত্তি করে।

উপসংহার: ব্যবহার করুন (a/b>>0)(অথবা (~~(a/b))বা (a/b|0)) দক্ষতা% লাভ 20 সম্পর্কে অর্জন করা। এগুলিও মনে রাখবেন যে তারা Math.floorকখন, কখনই অসম্পূর্ণ a/b<0 && a%b!=0


54
দ্রষ্টব্য যে গতির জন্য পূর্ণসংখ্যা বিভাগকে অনুকূলকরণ করা যদি আপনি এটি অনেক কিছু করে থাকেন তবেই তা বোধগম্য হবে । অন্য যে কোনও ক্ষেত্রে আমি সহজতমটি (যা আপনার এবং আপনার সহকর্মীদের কাছে সহজ মনে হয়) চয়ন করার পরামর্শ দিচ্ছি।
mik01aj

7
@ এম01 সম্পূর্ণরূপে সম্মত হন - অনলাইনের মতো স্টাফগুলিতে ফোকাসের অনেক বেশি কারণ রয়েছে
জনিআআআআআআআ

2
@ এম01 তবে এটি আরও শক্ত: আরও Math.floorকতগুলি এপিআই ফাংশন সম্পর্কে শিখতে এবং ~(বিটওয়াইস-নট) অপারেটর সম্পর্কে শিখতে এবং কীভাবে বিএসওয়াইস অপারেশন জেএসে কাজ করে এবং তারপরে ডাবল টিলডের প্রভাব বোঝে ?
স্টিজন ডি উইট

11
ঠিক আছে, যদি আপনার সহকর্মীরা এসেম্বলারের মধ্যে চিপগুলি প্রোগ্রামিং না করে থাকেন তবে তারা সম্ভবত Math.floorআরও ভাল বুঝতে পারবেন । এবং না হলেও, এটি গুগল able
mik01aj

2
@ মারকগ্রিন হ্যাঁ তবে কেবল এটি করতে চাইলে এর অর্থ এই নয় যে আপনার পক্ষে এটি একটি অদ্ভুত আকারে লেখা উচিত কেবল কারণটি এটি দ্রুততর হয়, ভাল কারণ ছাড়াই - সাধারণভাবে কোডের স্পষ্টতা আপনার প্রথম উদ্বেগ হওয়া উচিত। এছাড়াও ভাষা পরিবর্তন হওয়ার পরে এবং বিভিন্ন ব্রাউজার জুড়ে এই পরীক্ষাগুলি সম্পূর্ণ অর্থহীন হতে পারে - আপনার অ্যাপ্লিকেশনটিতে ধীরগতি কি তা নির্ধারণ করার জন্য আপনার প্রোফাইল দরকার। যদি আপনি ইতিমধ্যে অন্য কোনও জিনিসটিকে ইতিমধ্যে অনুকূলিত না করেন তবে এটি আপনার পূর্ণসংখ্যার বিভাগ পদ্ধতি হওয়ার সম্ভাবনা নেই!
JonnyRaa

150

ES6 নতুন Math.truncপদ্ধতিটি প্রবর্তন করে । এটি @ মার্কএলিয়ট এর উত্তর ঠিক করার অনুমতি দেয় যাতে এটি নেতিবাচক সংখ্যার জন্যও কার্যকর হয়:

var div = Math.trunc(y/x);
var rem = y % x;

নোট করুন যে Mathপদ্ধতিগুলি বিটওয়াইজ অপারেটরগুলির চেয়ে সুবিধা অর্জন করে যে তারা 2 31 এর উপরে সংখ্যা নিয়ে কাজ করে ।


var y = 18014398509481984; var x = 5; ডিভ =? - বাগ?
4esn0k

4
@ 4esn0k এটি কোনও বাগ নয়। আপনার সংখ্যার অনেকগুলি সংখ্যা রয়েছে, আপনার 64-বিট বাইনারি ফর্ম্যাট আইইইই 754 সংখ্যায় এতটা নির্ভুলতা থাকতে পারে না। উদাহরণস্বরূপ 18014398509481984 == 18014398509481985,।
অরিওল

18014398509481984 == 2 ** 54, এবং আমি এই নম্বরটি বিশেষভাবে ব্যবহার করেছি, কারণ এটি ঠিক বাইনারি 64 ফর্ম্যাটে উপস্থাপিত হয়। এবং উত্তরটি হুবহু উপস্থাপন করা হয়েছে
4esn0k

1
আমি মনে করি পছন্দটি সহজ: আপনার 32 টি বিট সাইন ইন সংখ্যার জন্য সমর্থন দরকার? ব্যবহার ~~(x/y)। স্বাক্ষরিত 54 বিট পর্যন্ত বড় সংখ্যা সমর্থন করা দরকার? আপনার কাছে Math.truncথাকলে বা Math.floorঅন্যথায় (নেতিবাচক সংখ্যার জন্য সঠিক) ব্যবহার করুন। আরও বড় সংখ্যা সমর্থন করা প্রয়োজন? কিছু বড় সংখ্যক গ্রন্থাগার ব্যবহার করুন।
স্টিজন ডি উইট

4
গুগল থেকে রুবিস্টদের সন্ধানে আপনি এখানে divmodএটি প্রয়োগ করতে পারেন:function divmod(x, y) { var div = Math.trunc(x/y); var rem = x % y; return [div, rem]; }
অ্যালেক্স মুর-নিমি

29
var remainder = x % y;
return (x - remainder) / y;

1
এই সংস্করণটি দুর্ভাগ্যক্রমে পরীক্ষায় ব্যর্থ হয় যখন x = -100 কারণ এটি -৩৩ এর পরিবর্তে -34 ফেরত দেয়।
স্যামুয়েল

1
"var x = 0.3; var y = 0.01 সম্পর্কে কি?" ? ( github.com/ জুলিয়াল্যাং
জুলিয়া

আসলে, সামুয়েল, নেতিবাচক মান সহ, এই পদ্ধতিটি সঠিক ফলাফল দেয়, বা কমপক্ষে এটি পদ্ধতি ব্যবহার করে Math.trunc:) হিসাবে একই মানগুলি প্রদান করে । আমি 100,3 দিয়ে পরীক্ষা করেছি; -100,3; 100, -3 এবং -100, -3। অবশ্যই, আপনার মন্তব্য এবং জিনিসগুলি পরিবর্তনের পরে অনেক সময় কেটে গেছে।
মার্জন ভেনেমা

19

আমি সাধারণত:

const quotient =  (a - a % b) / b;
const remainder = a % b;

এটি সম্ভবত সবচেয়ে মার্জিত নয়, তবে এটি কার্যকর।


1
দুর্দান্ত সমাধান কারণ এটি কোনও ফ্লোটকে পার্সিং বা কাটানোর কুৎসিততা এড়িয়ে চলে।
ডেম পিলাফিয়ান

6
আপনার যদি ভাগফল এবং বাকী উভয়ই প্রয়োজন হয় তবে প্রথমে বাকীটি গণনা করুন এবং তারপরে ভাগফলের জন্য অভিব্যক্তিতে সেই মানটি পুনরায় ব্যবহার করুন, অর্থফল = (ক - অবশিষ্ট) / বি;
gb96

2
বাকী = a% b; কোয়েন্টিয়েন্ট = (ক - বাকি) / বি;
Zv_oDD

16

আপনি parseIntএকটি কাটা ফলাফল পেতে ফাংশনটি ব্যবহার করতে পারেন ।

parseInt(a/b)

বাকিগুলি পেতে, মোড অপারেটরটি ব্যবহার করুন:

a%b

বেস 10 এর সাথে র‌্যাডিক্স প্যারামিটার ব্যবহার এড়াতে স্ট্রিংগুলির সাথে পার্সেন্টের কিছু সমস্যা রয়েছে

parseInt("09", 10)

কিছু ক্ষেত্রে সংখ্যার স্ট্রিং প্রতিনিধিত্ব একটি বৈজ্ঞানিক স্বরলিপি হতে পারে, এই ক্ষেত্রে, পার্সিয়ান্ট একটি ভুল ফলাফল আনবে।

parseInt(100000000000000000000000000000000, 10) // 1e+32

এই কল ফলাফল হিসাবে 1 উত্পাদন করবে।


7
parseIntসম্ভব হলে এড়ানো উচিত। এখানে ডগলাস ক্রকফোর্ডের সতর্কতা হ'ল: "যদি স্ট্রিংটির প্রথম অক্ষর 0 হয় তবে স্ট্রিংটি বেস 10 এর পরিবর্তে বেস 8 এ মূল্যায়ন করা হয়। বেস 8 তে, 8 এবং 9 সংখ্যা নয়, সুতরাং পার্সেন্ট (" 08 ") এবং পার্সেন্ট ("09") তাদের ফলাফল হিসাবে 0 উত্পাদন করে। এই ত্রুটিটি প্রোগ্রামগুলিতে সমস্যা সৃষ্টি করে যা তারিখ এবং সময়গুলি পার্স করে। ভাগ্যক্রমে, পার্সইন্ট একটি র‌্যাডিক্স প্যারামিটার নিতে পারে, যাতে পার্সেন্ট ("08", 10) 8 উত্পন্ন হয় I আমি আপনাকে সুপারিশ করি সর্বদা রেডিক্স প্যারামিটার সরবরাহ করুন। " আর্কাইভ.ওরিলি.com
পাওয়ার

3
বিভাগে, আমি আশা করি একটি স্ট্রিং নয়, একটি নম্বর পাবে, তবে এটি একটি ভাল পয়েন্ট।
ipডিপো কোস্টা রেবুইস

2
@ পাওয়াররা তাই রেডিক্স যুক্ত করুন। তিনি বলেন না যে parseIntএড়ানো উচিত; ঠিক তেমন কিছু সচেতন থাকতে হবে। আপনাকে অবশ্যই এই বিষয়গুলি সম্পর্কে সচেতন হতে হবে এবং মোকাবেলা করার জন্য প্রস্তুত থাকতে হবে।
কোনটি

2
কখনও parseIntকোনও সংখ্যার যুক্তি দিয়ে কল করবেন না । parseIntআংশিক-সংখ্যাগত স্ট্রিং পার্স করার কথা, সংখ্যাগুলি কেটে দেওয়া হবে না।
ওরিওল

1
জিনিসগুলি মূলত কোনও নির্দিষ্ট উপায়ে ব্যবহার করার উদ্দেশ্যে বোঝানো হয়নি, এর অর্থ এই নয় যে আপনার উচিত নয়। এই উত্তর কাজ করে।
ফ্রিজ্যান্ট

6

জাভাস্ক্রিপ্ট তাদের গাণিতিক সংজ্ঞা অনুসরণ করে negativeণাত্মক সংখ্যার তল এবং অ-পূর্ণসংখ্যার অবশিষ্টগুলির গণনা করে।

ফ্লোরটিকে "প্যারামিটারের চেয়ে ছোট বৃহত্তম পূর্ণসংখ্যার সংখ্যা" হিসাবে সংজ্ঞায়িত করা হয়:

  • ধনাত্মক সংখ্যা: ফ্লোর (এক্স) = এক্স এর পূর্ণসংখ্যা অংশ;
  • নেতিবাচক সংখ্যা: ফ্লোর (এক্স) = এক্স বিয়োগ 1 এর পূর্ণসংখ্যা অংশ (কারণ এটি অবশ্যই প্যারামিটারের চেয়ে ছোট হওয়া উচিত, অর্থাত্ আরও নেতিবাচক!)

স্মারককে বিভাগের "বাম ওভার" হিসাবে চিহ্নিত করা হয় (ইউক্লিডিয়ান পাটিগণিত)। যখন লভ্যাংশটি কোনও পূর্ণসংখ্যার হয় না, তখন ভাগফলটি সাধারণত কোনও পূর্ণসংখ্যারও হয় না, অর্থাত্ কোনও অবশিষ্ট নেই but ভাসমান-পয়েন্ট নম্বর), অবশ্যই একটি অ-পূর্ণসংখ্যার "বাম উপরে" থাকবে, স্পষ্টতই।

জাভাস্ক্রিপ্ট প্রত্যাশিত হিসাবে সবকিছু গণনা করে, সুতরাং প্রোগ্রামারকে অবশ্যই সঠিক প্রশ্ন জিজ্ঞাসা করতে সতর্ক থাকতে হবে (এবং লোকেরা যা জিজ্ঞাসা করা হয়েছে তার উত্তর দিতে সতর্ক হওয়া উচিত!) ইয়ারিনের প্রথম প্রশ্নটি "ওয়াই দ্বারা এক্স এর পূর্ণসংখ্যা বিভাগ কী" নয়, তবে, পরিবর্তে, "প্রদত্ত পূর্ণসংখ্যার পুরো সংখ্যাটি অন্যটিতে যায়"। ধনাত্মক সংখ্যার জন্য, উত্তর উভয়ের জন্য একই, তবে negativeণাত্মক সংখ্যার জন্য নয়, কারণ সংখ্যার (বিভাজক) "" অন্য "(ডিভিডেন্ড) -এ যাওয়ার সময়ের চেয়ে পূর্ণসংখ্যা বিভাগ (ডিভাইডারের দ্বারা লভ্যাংশ) -1 ছোট হবে। অন্য কথায়, ফ্লোর একটি নেতিবাচক সংখ্যার পূর্ণসংখ্যা বিভাগের জন্য সঠিক উত্তরটি ফিরিয়ে দেবে, তবে ইয়্যারিন তা জিজ্ঞাসা করলেন না!

গ্যাম্যাক্স সঠিকভাবে উত্তর দিয়েছে, এই কোডটি ইয়ারিনের অনুরোধ অনুসারে কাজ করে। অন্যদিকে, স্যামুয়েল ভুল, তিনি গণিত করেননি, আমার ধারণা, বা তিনি দেখতে পেয়েছেন যে এটি কাজ করে (এছাড়াও, তিনি তার উদাহরণের বিভাজক কী তা বলেন নি, তবে আমি আশা করি এটি ছিল 3):

অবশিষ্টাংশ = এক্স% ওয়াই = -100% 3 = -1

গোয়েসন্টো = (এক্স - রিমাইন্ডার) / ওয়াই = (-100 - -1) / 3 = -99 / 3 = -33

যাইহোক, আমি ফায়ারফক্স ২.0.০.১-তে কোডটি পরীক্ষা করেছি, এটি প্রত্যাশা অনুযায়ী কাজ করেছে, ইতিবাচক এবং নেতিবাচক সংখ্যার সাথে এবং লভ্যাংশ এবং বিভাজক উভয়ের জন্য অ-পূর্ণসংখ্যার মানগুলির সাথেও। উদাহরণ:

-100.34 / 3.57: গোয়েসন্টো = -28, অবশিষ্টাংশ = -0.3800000000000079

হ্যাঁ, আমি লক্ষ করেছি, সেখানে একটি যথার্থ সমস্যা আছে, তবে এটি পরীক্ষা করার আমার কাছে সময় ছিল না (এটি ফায়ারফক্স, উইন্ডোজ 7 বা আমার সিপিইউয়ের এফপিইউতে সমস্যা কিনা তা আমি জানি না)। ইয়ারিনের প্রশ্নের জন্য, যদিও এটিতে কেবল পূর্ণসংখ্যা জড়িত, গ্যামাক্সের কোডটি পুরোপুরি কার্যকরভাবে কাজ করে।


5

Math.floor(operation) অপারেশনের বৃত্তাকার ডাউন মান প্রদান করে।

1 প্রশ্নের উদাহরণ :

var x = 5;
var y = 10.4;
var z = Math.floor(x + y);

console.log(z);

কনসোল:

15

2 তম প্রশ্নের উদাহরণ :

var x = 14;
var y = 5;
var z = Math.floor(x%y);

console.log(x);

কনসোল:

4


2

পৃষ্ঠাগুলির সংখ্যা গণনা এক ধাপে করা যেতে পারে: ম্যাথ.সিল (x / y)


আমি দেখতে পাচ্ছি না কীভাবে এটি বাকীটি সরবরাহ করে।
পল রুনি

1

উত্তর হিসাবে অ্যালেক্স মুর-নীমির মন্তব্য:

গুগল থেকে এখানে রুবিস্টদের সন্ধানে divmod, আপনি এটি প্রয়োগ করতে পারেন:

function divmod(x, y) {
  var div = Math.trunc(x/y);
  var rem = x % y;
  return [div, rem];
}

ফলাফল:

// [2, 33]

2
সাধারণত, divmodমেঝেযুক্ত বিভাগ ( Math.floor) ব্যবহার করে , যা Math.truncনেতিবাচক সংখ্যার সাথে জড়িত থাকার সময় কাটা বিভাগ ( ) থেকে পৃথক হয়। এটি এনপিএম divmodপ্যাকেজ , রুবিdivmod , এসডাব্লুআই-প্রোলোগdivmod এবং সম্ভবত অন্যান্য অনেকগুলি বাস্তবায়নের ক্ষেত্রেও এটি।
প্লেক

কাটা বিভাগটি মেঝে বিভাগের চেয়ে প্রাকৃতিকভাবে সজ্জিত ফলাফল দেয় তবে সামঞ্জস্যতা ট্রাম্প করে যে, আইএমও। সম্ভবত, মেঝে বিভাগ ব্যবহারের জন্য গাণিতিক বা পারফরম্যান্সের কারণগুলিও রয়েছে। নোট করুন যে সাধারণত, divmodউপস্থিত থাকে কারণ এটি দুটি অপারেশন পৃথকভাবে কম্পিউটিংয়ের চেয়ে দ্বিগুণ দ্রুত সম্পাদন করে। এই কর্মক্ষমতা সুবিধা ছাড়াই এই জাতীয় কোনও ক্রিয়াকলাপ প্রদান বিভ্রান্তিকর হতে পারে।
প্লেকে

1

আপনি যদি কেবল দুটিটির সাথে ভাগ করে চলেছেন তবে আপনি বিটওয়াইড অপারেটরগুলি ব্যবহার করতে পারেন:

export function divideBy2(num) {
  return [num >> 1, num & 1];
}

export function divideBy4(num) {
  return [num >> 2, num & 3];
}

export function divideBy8(num) {
  return [num >> 3, num & 7];
}

(প্রথমটি ভাগফল, দ্বিতীয়টি বাকী)


সাধারণত function divideByPowerOf2(num, exponent) { return [num >> exponent, num & ((1 << exponent) - 1)]; },।
প্যালেক

0

ইতিবাচক এবং নেতিবাচক পূর্ণসংখ্যার মানগুলি কীভাবে পরিচালনা করতে হয় তার সিদ্ধান্ত নিতে আপনি তিন্নি ব্যবহার করতে পারেন।

var myInt = (y > 0) ? Math.floor(y/x) : Math.floor(y/x) + 1

সংখ্যাটি যদি ইতিবাচক হয় তবে সব ঠিক আছে। সংখ্যাটি যদি negativeণাত্মক হয় তবে এটি ম্যাথ.ফ্লুর নেতিবাচক হ্যান্ডেলগুলির কারণে এটি 1 যুক্ত করবে।


0

এটি সর্বদা শূন্যের দিকে ছাঁটাবে। এটি খুব দেরি হয়েছে কিনা তা নিশ্চিত নয়, তবে এখানে এটি যায়:

function intdiv(dividend, divisor) { 
    divisor = divisor - divisor % 1;
    if (divisor == 0) throw new Error("division by zero");
    dividend = dividend - dividend % 1;
    var rem = dividend % divisor;
    return { 
        remainder: rem, 
        quotient: (dividend - rem) / divisor
    };
}

0

আপনার যদি খুব বড় পূর্ণসংখ্যার জন্য অবশিষ্ট গণনা করতে হয়, যা জেএস রানটাইম যেমন হিসাবে প্রতিনিধিত্ব করতে পারে না (2 ^ 32 এর চেয়ে বড় কোনও পূর্ণসংখ্যাকে একটি ভাসা হিসাবে উপস্থাপন করা হয় এবং সুতরাং এটি নির্ভুলতা হারিয়ে ফেলে) আপনার কিছু কৌশল করতে হবে।

এটি আমাদের প্রতিদিনের জীবনের অনেক ক্ষেত্রে (ব্যাংক অ্যাকাউন্ট নম্বর, ক্রেডিট কার্ড, ...) উপস্থিত চেক ডিজিটের অনেকগুলি ক্ষেত্রে যাচাইয়ের জন্য বিশেষত গুরুত্বপূর্ণ (

সবার আগে আপনার সংখ্যাটি স্ট্রিং হিসাবে প্রয়োজন (অন্যথায় আপনি ইতিমধ্যে নির্ভুলতা হারিয়ে ফেলেছেন এবং বাকী অংশটি বোঝায় না)।

str = '123456789123456789123456789'

আপনার স্ট্রিংটি এখন ছোট অংশগুলিতে বিভক্ত করতে হবে, ছোট ছোট যাতে কোনও অবশিষ্ট অংশের কাঠামো এবং স্ট্রিংয়ের টুকরো 9 টি সংখ্যায় ফিট করতে পারে।

digits = 9 - String(divisor).length

স্ট্রিং বিভক্ত করতে একটি নিয়মিত প্রকাশ প্রস্তুত করুন

splitter = new RegExp(`.{1,${digits}}(?=(.{${digits}})+$)`, 'g')

উদাহরণস্বরূপ, যদি digits7 হয় তবে রেজিপ্সপ হয়

/.{1,7}(?=(.{7})+$)/g

এটি সর্বাধিক দৈর্ঘ্যের of এর একটি অযৌক্তিক স্ট্রিংয়ের সাথে মেলে যা (?=...)একটি ধরণের একাধিক অক্ষরের দ্বারা অনুসরণ করা হয় ( ইতিবাচক চেহারা) 7.. এর 'জি' হ'ল এক্সপ্রেশনটি সমস্ত স্ট্রিংয়ের মাধ্যমে চালানো হয়, প্রথম ম্যাচে থামছে না।

এখন প্রতিটি অংশকে পূর্ণসংখ্যায় রূপান্তর করুন, এবং অবশিষ্টাংশগুলি গণনা করুন reduce(পূর্ববর্তী অবশিষ্টটিকে আবার যোগ করুন - বা 0 - 10 এর সঠিক শক্তি দ্বারা গুণিত):

reducer = (rem, piece) => (rem * Math.pow(10, digits) + piece) % divisor

এটি "বিয়োগ" বাকী অ্যালগোরিদমের কারণে কাজ করবে:

n mod d = (n - kd) mod d

যা চূড়ান্ত বাকী অংশকে প্রভাবিত না করে কোনও সংখ্যার দশমিক দশমিক উপস্থাপনার কোনও 'প্রাথমিক অংশ' প্রতিস্থাপন করতে দেয়।

চূড়ান্ত কোডটি দেখতে হবে:

function remainder(num, div) {
  const digits = 9 - String(div).length;
  const splitter = new RegExp(`.{1,${digits}}(?=(.{${digits}})+$)`, 'g');
  const mult = Math.pow(10, digits);
  const reducer = (rem, piece) => (rem * mult + piece) % div;

  return str.match(splitter).map(Number).reduce(reducer, 0);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.