আমি কীভাবে জাভাস্ক্রিপ্ট নম্বর থেকে দশমিক অংশটি সরিয়ে ফেলতে পারি?


218

আমার একটি বিভাগের ফলাফল রয়েছে এবং আমি ফলাফলের সংখ্যার দশমিক অংশটি বাতিল করতে চাই।

কিভাবে আমি এটি করতে পারব?

উত্তর:


383

আপনি ব্যবহার করতে পারেন...

  • Math.trunc() (ভগ্নাংশের অংশ কেটে নিন, নীচে দেখুন)
  • Math.floor() (নিচে সুসম্পন্ন)
  • Math.ceil() (বৃত্তাকার)
  • Math.round() (নিকটতম পূর্ণসংখ্যার বৃত্তাকার)

... আপনি কীভাবে দশমিক মুছে ফেলতে চেয়েছিলেন তার উপর নির্ভরশীল।

Math.trunc()এখনও সমস্ত প্ল্যাটফর্মগুলিতে সমর্থিত নয় (যেমন আইই), তবে আপনি সহজেই এর মধ্যে একটি পলিফিল ব্যবহার করতে পারেন ।

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


আপনি ভাসমান পয়েন্ট পাটিগণিতের সাথে দশমিক রাউন্ডিংয়ের অসাধ্যতার কথাও বলতে পারেন।

প্রয়োজনীয় পাঠ্য - প্রতিটি কম্পিউটার বিজ্ঞানীর ভাসমান-পয়েন্ট পাটিগণিত সম্পর্কে কী জানা উচিত


29
মনে রাখবেন যে রাখুন Math.floor()হবে বৃদ্ধি সংখ্যাগত মান যখন সংখ্যা নেতিবাচক । এইভাবে Math.floor(-1.2) -> -2যখন Math.floor(1.2) -> 1parseInt(-1.2) -> -1( @ ফ্লয়েডপিংক দ্বারা উল্লিখিত হিসাবে ) পজিটিভ এবং নেতিবাচক উভয় সংখ্যার জন্য প্রত্যাশার হিসাবে দশমিক অংশটি বাতিল করবে ।
পল টি। রাউকেন

1
@ পলটি। রাউকেন আপনি দশমিক অংশটি ফেলে দেওয়ার জন্য বিটওয়াস অপারেটরটি ব্যবহার করতে পারেন, তবে মনে রাখবেন এটি 32 বিটকেও কাটাবে।
অ্যালেক্স

2
নিম্নলিখিতটি এই উত্তরটি অস্থির দেখায়:> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
জেক

4
@ জেক 2.3*100জাভাস্ক্রিপ্টের ফলাফল 229.99999999999997, সুতরাং মনে হচ্ছে বিটওয়াইস অপারেটর আপনার উদাহরণটি সঠিকভাবে এটি সম্পাদন করছে।
চাদ ভন নঃ

|0Bit৪ বিট পূর্ণসংখ্যার ব্যবহারের কি এর মতো কোনও সমাধান রয়েছে ?
ক্লিন্ট

49

দশমিক কেটে যাওয়ার জন্য আপনি বিটওয়াইড অপারেটরগুলিও ব্যবহার করতে পারেন।

যেমন

var x = 9 / 2;
console.log(x); // 4.5

x = ~~x;
console.log(x); // 4

x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3

বিটওয়াইজ অপারেশনগুলি ম্যাথ ফাংশনগুলির চেয়ে যথেষ্ট কার্যকর are ডাবল নট বিটওয়াইজ অপারেটরটিও নগন্য পরিমাণে x | 0এবং x << 0বিটওয়াইজ অপারেশনগুলিকে সামান্য ছাড়িয়ে গেছে বলে মনে হচ্ছে ।

// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) | 0;
}

// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) << 0;
}

// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
    Math.trunc(i * 0.5);
}

// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
    ~~(i * 0.5);
}

আরও লক্ষণীয় যে বিটওয়াইজ নট অপারেটর গাণিতিক ক্রিয়াকলাপগুলির তুলনায় অগ্রাধিকার গ্রহণ করে, তাই আপনাকে উদ্দেশ্যযুক্ত ফলাফল পেতে প্যারেন্টেসিসের সাথে গণনাগুলি ঘিরতে হবে:

x = -3.7

console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

ডাবল বিটওয়াইজ নন অপারেটর সম্পর্কে আরও তথ্য ডাবল বিটওয়াইজ নট (~~) এ পাওয়া যাবে


2
প্রান্তিক দক্ষ হতে পারে। তবে, আমি 'ম্যাথ' ফাংশনগুলিকে আরও পাঠযোগ্য বলে পরামর্শ দেব।
ashipj

সম্ভাবনাগুলি হ'ল যদি এটি পূর্ণসংখ্যায় 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার ( স্ট্যাকওভারফ্লো.com / a / 7488075 / 3655192 ) হিসাবে প্রতিনিধিত্ব না করে তবে এটি কাজ করে না
হিরোকি

30

আপনি করতে পারেন

parseInt(a/b)

17
দ্রষ্টব্য যে parseIntবৃহৎ সংখ্যক জন্য নির্ভরযোগ্যভাবে কাজ করবে না, কারণ এটি প্রথমে তার যুক্তিটিকে স্ট্রিনে রূপান্তর করে কাজ করে এবং বৃহত সংখ্যার জন্য ফলাফল ক্ষতিকারক স্বরলিপি ব্যবহার করবে। উদাহরণস্বরূপ: var n = 22222222222222222222222; parseInt(n);ফিরে আসবে 2, কারণ n.toString()ফিরে আসে 2.2222222222222223e+22

2
এটি parseInt()তার উদ্দেশ্যটির জন্যও ব্যবহার করছে না , এটি একটি স্ট্রিংয়ের একটি নম্বর নেওয়া এবং একটিকে ফেরত দেওয়া Number
আলেক্স

22

আপনি নিম্নলিখিত কোডটি ব্যবহার করে দশমিক পয়েন্ট (এখানে 2 অঙ্ক) পরে নির্দিষ্ট একটি সংখ্যাও প্রদর্শন করতে পারেন:

var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string


4
সচেতন হন যে টু ফিক্সড () একটি স্ট্রিং দেয়, একটি সংখ্যা নয়। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

1
ওপি দশমিক অংশটি সরিয়ে দিতে বলার উত্তর হিসাবে এটি কীভাবে হয়
আইজাক

3
যদিও এটি একটি স্ট্রিং ফিরিয়েছে, আপনি কেবল এটি সংশোধন করার জন্য সংখ্যা () পদ্ধতিটি ব্যবহার করতে পারেন .. সংখ্যা ((15.46974)। টো ফিক্সড (2))
আইপজার্ড



6

ES2015 সহ, Math.trunc () উপলব্ধ।

Math.trunc(2.3)                       // 2
Math.trunc(-2.3)                      // -2
Math.trunc(22222222222222222222222.3) // 2.2222222222222223e+22
Math.trunc("2.3")                     // 2
Math.trunc("two")                     // NaN
Math.trunc(NaN)                       // NaN

এটি আইই ১১ বা তার নীচে সমর্থিত নয়, তবে এজ এবং অন্যান্য প্রতিটি আধুনিক ব্রাউজারে কাজ করে।


2
এক্স দশমিক জায়গায় ছাঁটাই করতে দেয় এমন কোনও প্রকারের কথা জানেন? এটা Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)কাজ করবে ভাবতে কি নির্দোষ হবে?
জ্যামিবারো

2
আরে জেমি, দেখে মনে হচ্ছে এটি বেশিরভাগ ক্ষেত্রেই কাজ করবে তবে এটি ভাসমান পয়েন্ট গ্যাটাচসের জন্য সংবেদনশীল। যেমন value = 2.3এবং x = 2ফিরে আসবে 2.29। আমার কাছে এর চেয়ে ভাল পরামর্শ নেই।
চাদ ভন নউ

এটি আমার কাছে সঠিক উত্তর বলে মনে হচ্ছে। উপরের বা নিম্নের কোনও বৃত্তাকার নেই। নেতিবাচক সংখ্যা নিয়ে কোনও সমস্যা নেই। দশমিকটি ফেলে দিন। যেমন প্রশ্ন করা হয়েছে।
এনরিক মোরেনো তাঁবু

2

আপনি যদি রাউডিংয়ের বিষয়ে চিন্তা করেন না, কেবল সংখ্যাটিকে একটি স্ট্রিংয়ে রূপান্তর করুন, তারপরে পিরিয়ড সহ পিরিয়ডের পরে সবকিছু সরিয়ে ফেলুন। দশমিক আছে কি না তা এটি কাজ করে।

const sEpoch = ((+new Date()) / 1000).toString();
const formattedEpoch = sEpoch.split('.')[0];

1

toFixed বৃত্তাকার মত আচরণ করবে।

মেঝে যেমন আচরণের জন্য% ব্যবহার করুন:

var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3

2
আপনি ম্যাথ.ফ্লুর ব্যবহারের চেয়ে কেন ভাল মনে করেন? আপনার সমাধানটি অযথা জটিল এবং ধীর বলে মনে হচ্ছে। আমি জানি না ম্যাথ.ফ্লুর কীভাবে কাজ করে তবে আমি এটি আরও অনেক বেশি অনুকূলিত হওয়ার আশা করি। এছাড়াও, আমি ভাবছি যে আপনার সমাধানটি ভাসমান পয়েন্টের বৃত্তাকার ত্রুটির ফলে ভুগতে পারে।
হান্স রয়েরডিনকোল্ডার

1

উপরের পোস্টগুলির সাহায্যে বিশদ ব্যাখ্যায় সংবেদনশীল এখানে:

1. ম্যাথ.ট্রুঙ্ক (): এটি বিন্দু দ্বারা অনুসরণ করা হয় এমন অঙ্কগুলি সরাতে ব্যবহৃত হয়। এটি স্পষ্টত রূপান্তরিত করে। তবে, IE এ সমর্থিত নয়।

উদাহরণ:

ম্যাথ.ট্রুঙ্ক (10.5) // 10

ম্যাথ.ট্রুঙ্ক (-10.5) // -10

অন্যান্য বিকল্প উপায়: বিটওয়াইসের ব্যবহার অপারেটর নয়:

উদাহরণ:

x = 5.5

~~ x // 5

২. ম্যাথ.ফ্লুর (): এটি সর্বনিম্ন পূর্ণসংখ্যার মানটি গ্রহণযোগ্য হিসাবে ব্যবহৃত হয়। এটি সমস্ত ব্রাউজারে সমর্থিত।

উদাহরণ:

ম্যাথ.ফ্লুর (10.5) // 10

ম্যাথ.ফ্লুর (-10.5) // -11

৩. ম্যাথ.সিল (): এটি সর্বোচ্চ সংখ্যার সম্ভাব্য মান প্রদান করতে ব্যবহৃত হয়। এটি সমস্ত ব্রাউজারে সমর্থিত।

উদাহরণ:

ম্যাথ.সিল (10.5) // 11

ম্যাথ.সিল (-10.5) // -10

4. ম্যাথ.উইন্ড (): এটি নিকটতম পূর্ণসংখ্যার সাথে গোলাকার। এটি সমস্ত ব্রাউজারে সমর্থিত।

উদাহরণ:

ম্যাথ.উন্ড (10.5) // 11

ম্যাথ.উইন্ড (-10.5) // -10

ম্যাথ.উন্ড (10.49) // 10

ম্যাথ.উন্ড (-10.51) // -11


0

একটি ES6 বাস্তবায়নের জন্য, নীচের মতো কিছু ব্যবহার করুন:

const millisToMinutesAndSeconds = (millis) => {
  const minutes = Math.floor(millis / 60000);
  const seconds = ((millis % 60000) / 1000).toFixed(0);
  return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
}

0

এটি তাদের জন্য যারা ব্যবহারকারীদের দশমিক সংখ্যা প্রবেশ করতে বাধা দিতে চান

<input id="myInput" onkeyup="doSomething()" type="number" />

<script>
    function doSomething() {

        var intNum = $('#myInput').val();

        if (!Number.isInteger(intNum)) {
            intNum = Math.round(intNum);
        }

        console.log(intNum);
    }
</script>

0

দশমিক অংশ সম্পূর্ণ করতে আপনি টু ফিক্সড (0) ব্যবহার করতে পারেন বা আর্গুমেন্টে সংখ্যাটি সরবরাহ করতে পারেন যা আপনি দশমিক কাটা হতে চান।

দ্রষ্টব্য: টু ফিক্সড নম্বরটি স্ট্রিংয়ে রূপান্তর করবে।


0

উদাহরণ স্বরূপ:

var x = 9.656;
x.toFixed(0);           // returns 10
x.toFixed(2);           // returns 9.66
x.toFixed(4);           // returns 9.6560
x.toFixed(6);           // returns 9.656000 

অথবা

parseInt("10");         // returns 10
parseInt("10.33");      // returns 10
parseInt("10 20 30");   // returns 10
parseInt("10 years");   // returns 10
parseInt("years 10");   // returns NaN  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.