জাভাস্ক্রিপ্টে আমি কীভাবে কোনও সংখ্যাকে গোল করতে পারি?


228

আমি কীভাবে জাভাস্ক্রিপ্টে কোনও সংখ্যাকে গোল করতে পারি?

math.round() এটি কাজ করে না কারণ এটি এটি নিকটতম দশমিকের সাথে গোল করে।

আমি নিশ্চিত না যে দশমিক পয়েন্টে প্রথম বিট রাখার পরিবর্তে এটি ভেঙে দেওয়া ছাড়া আরও ভাল করার কোনও উপায় আছে কিনা I'm হতে হবে...


21
গোলটি শূন্যের দিকে বা নেতিবাচক অনন্তের দিকে?
ড্যানিয়েল ব্রুকনার

উত্তর:


422

ব্যবহার Math.floor()এটি করার একটি উপায় করা।

আরও তথ্য: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / ম্যাথ / ফ্লোর


2
এটিও সবচেয়ে ধীর পদ্ধতি; আপনার যদি এগুলির প্রচুর পরিশ্রম করতে হয় তবে বিটওয়াইস ব্যবহার করুন অপারেটর (আমার পোস্ট দেখুন)
geraldalewis

12
| | অপারেটর শূন্যের দিকেও ঘুরবে, নেতিবাচক অনন্ত নয়।
মাইক গডিন

60

নেতিবাচক অসীমের দিকে বৃত্তাকার - Math.floor()

+3.5 => +3.0
-3.5 => -4.0

শূন্যের দিকে গোল - সাধারণত বলা হয় Truncate(), তবে জাভাস্ক্রিপ্ট দ্বারা সমর্থিত নয় - Math.ceil()negative ণাত্মক সংখ্যার Math.floor()জন্য এবং ধনাত্মক সংখ্যার জন্য ব্যবহার করে অনুকরণ করা যায় ।

+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()

সম্পূর্ণতার জন্য আপনাকে ধন্যবাদ তবে মূলধনটি ভুল ... এবং জাভা স্ক্রিপ্টে যা একটি বিশাল পার্থক্য করে। অন্যথায় আমি এখানে upvote হবে।
জর্জ

আমি উত্তরটি আপডেট করেছি যাতে মূলধন এখন সঠিক হয়।
চেসেন

18
@ জর্জি বিশাল বা বিশাল? : D
m93a

1
আপনি রাউন্ড-টু-শূন্য মাধ্যমে একই প্রভাব পেতে পারেন x | 0
আহমেদ ফাসিহ 6:56

28

Math.floor()কাজ করবে, তবে বিটওয়াইজ ORঅপারেশন ব্যবহারের তুলনায় এটি খুব ধীর :

var rounded = 34.923 | 0;
alert( rounded );
//alerts "34"

সম্পাদনা Math.floor() হয় না ব্যবহার তুলনায় ধীর | অপারেটর. আমার কাজ যাচাই করার জন্য জেসন এসকে ধন্যবাদ জানাই।

আমি যা পরীক্ষার জন্য কোডটি ব্যবহার করেছি তা এখানে:

var a = [];
var time = new Date().getTime();
for( i = 0; i < 100000; i++ ) {
    //a.push( Math.random() * 100000  | 0 );
    a.push( Math.floor( Math.random() * 100000 ) );
}
var elapsed = new Date().getTime() - time;
alert( "elapsed time: " + elapsed );

11
??? আমি সবেমাত্র jsdb (www.jsdb.org) চালিয়েছি যা স্পাইডারমনকি ১. uses ব্যবহার করে, এবং x. [i] এর 100000 ভাসমান পয়েন্ট সংখ্যাগুলির অ্যারেতে প্রথমে ম্যাথ.ফ্লুয়ার () এর সাথে একত্রে লুপ দৌড়েছি, তারপরে বিটওয়াইসের সাথে বা আপনার পরামর্শ অনুসারে এটি প্রায় একই সময় নিয়েছিল, 125 ম্যাসি।
জেসন এস

4
সবেমাত্র 500000 ভাসমান পয়েন্ট সংখ্যা দিয়ে পরীক্ষাটি পুনরাবৃত্তি করে, প্রায় একই সময়ে প্রায় 625 মেসিও লেগেছিল।
জেসন এস

5
সুতরাং আমি দেখতে পাচ্ছি না যে 1.25 ইউসেক খুব ধীর।
জেসন এস

3
আপনার ডেটা নিয়ে তর্ক করতে পারবেন না :) আমি মনে করি আমি জেএসের প্রয়োগকে অ্যাকশনস্ক্রিপ্টের সাথে বিভ্রান্ত করে থাকতে পারি (ইকামাস্ক্রিপ্টে নির্মিত; স্পষ্টতই প্রয়োগটি পৃথক হয়)। আমার কাজ পরীক্ষা করার জন্য ধন্যবাদ!
geraldalewis

14
তারাও একই কাজ করে না। |একটি 32-বিট পূর্ণসংখ্যায় রূপান্তরিত হয়, কাটা; Math.floorবৃত্তাকার নিচে। jsfiddle.net/minitech/UVG2w
রাই-

21

নির্দিষ্ট দশমিক দশকের জন্য যদি আপনাকে প্রয়োজন হয় তবে আপনি এই ফাংশনটি ব্যবহার করার চেষ্টা করতে পারেন

function roundDown(number, decimals) {
    decimals = decimals || 0;
    return ( Math.floor( number * Math.pow(10, decimals) ) / Math.pow(10, decimals) );
}

উদাহরণ

alert(roundDown(999.999999)); // 999
alert(roundDown(999.999999, 3)); // 999.999
alert(roundDown(999.999999, -1)); // 990

আমি মনে করি এর মতো ওয়ান-লাইনারের কোনও ফাংশনের প্রয়োজন নেই।
হুবার্ট গ্রেজস্কোয়িয়াক

4
রাউন্ডডাউন (4.56, 2) আপনাকে 4.55 দেয়, সুতরাং আমি মনে করি এটি ভাল সমাধান নয় it's
ক্রিস

6

নেতিবাচক অসীমের দিকে এগিয়ে যেতে, ব্যবহার করুন:

rounded=Math.floor(number);

শূন্যের দিকে গোল করতে (যদি সংখ্যাটি -2147483648 এবং 2147483647 এর মধ্যে 32-বিট পূর্ণসংখ্যার দিকে যেতে পারে), ব্যবহার করুন:

rounded=number|0;

শূন্যের দিকে গোল করতে (যে কোনও সংখ্যার জন্য), ব্যবহার করুন:

if(number>0)rounded=Math.floor(number);else rounded=Math.ceil(number);

5

এর numberদিকে 0স্বাক্ষরিত ভগ্নাংশটি বিয়োগ করে একটি দিকে গোল করা সম্ভব number % 1:

rounded = number - number % 1;

মত Math.floor(রাউন্ডের দিকে)-Infinity ) এই পদ্ধতিটি পুরোপুরি সঠিক।

সামলাচ্ছে পার্থক্য আছে -0, +Infinityএবং -Infinityযদিও:

Math.floor(-0) => -0
-0 - -0 % 1    => +0

Math.floor(Infinity)    => Infinity
Infinity - Infinity % 1 => NaN

Math.floor(-Infinity)     => -Infinity
-Infinity - -Infinity % 1 => NaN

3
Math.floor(1+7/8)

1 + 7/8 = 1 - সেখানে ম্যাথ.ফ্লুর () এর খুব বেশি দরকার নেই :)
জেসন বেরি

18
আসলে এটি (7/8) +1 যা 1 নয় 1. ধন্যবাদ 3 য় শ্রেণীর বীজগণিত
জো ফিলিপস

1
উম্ম, দয়া করে একটি জাভাস্ক্রিপ্ট প্রোগ্রামে এটি চেষ্টা করুন। আমি করেছিলাম. প্রদর্শন (1 + 7/8) এবং আপনি দেখতে পাবেন 1.875। ম্যাথ.গ্রাউন্ড (...) হ'ল ২, ম্যাথ.ফ্লুর (...) ১। আপনি ছেলেরা কী সম্পর্কে কথা বলছেন?
ডিজিটালরোস

1
অথবা ফায়ারফক্স ত্রুটি কনসোলটি খুলুন। অথবা ফায়ারব্যাগ। এটা চেষ্টা করা কঠিন নয়। আমি এটা চেষ্টা করেছি. 1 + 7/8 জেএসে 1.875। আপনি সম্ভবত ভুলে গেছেন যে জেএস-এ সমস্ত গণিত ভাসমান পয়েন্টে রয়েছে?
ডিজিটালরোস

3
এটি সম্ভবত ভুলে যাওয়া সহজ যে জাভাস্ক্রিপ্টটি ভাসমান পয়েন্টে সবকিছু করে। অন্যান্য অনেক ভাষায় 1 + 7/8 হ'ল 1 তবে জেএসে এটি সত্যই 1.875।
ডিজিটালরোস

3

আজ কারও সাথে এলিস কোডের সাথে গোলাকার বেঁধেছিল এবং নিম্নলিখিতটি পেয়েছেন যা রাউন্ডগুলিও ডাউন বলে মনে হচ্ছে:

var dec = 12.3453465,
int = dec >> 0; // returns 12

সাইন-প্রচারকারী ডান শিফ্ট (>>) এ আরও তথ্যের জন্য দেখুন MDN বিটওয়াইস অপারেটরগুলি

এটি কী করছে তা কাজে লাগাতে আমার কিছুটা সময় লেগেছিল: ডি

তবে উপরে বর্ণিত হিসাবে, ম্যাথ.ফ্লুর () আমার মতে কাজ করে এবং আরও পাঠযোগ্য বলে মনে হয়।


3
এটি যদি 32 টি বিটের সাথে ফিট না করে তবে নীরবে আপনার নম্বরটি মেরে ফেলবে। ক্রোমিয়াম কনসোল: 99999999999999999999999 | 0 => -167772160
ম্যাথিয়াস উরলিচস

0

আপনাকে অর্ধেক নিচে গোল করতে -1 লাগাতে হবে এবং এর পরে নীচের উদাহরণের মতো -1 দ্বারা গুণন করতে হবে।

<script type="text/javascript">

  function roundNumber(number, precision, isDown) {
    var factor = Math.pow(10, precision);
    var tempNumber = number * factor;
    var roundedTempNumber = 0;
    if (isDown) {
      tempNumber = -tempNumber;
      roundedTempNumber = Math.round(tempNumber) * -1;
    } else {
      roundedTempNumber = Math.round(tempNumber);
    }
    return roundedTempNumber / factor;
  }
</script>

<div class="col-sm-12">
  <p>Round number 1.25 down: <script>document.write(roundNumber(1.25, 1, true));</script>
  </p>
  <p>Round number 1.25 up: <script>document.write(roundNumber(1.25, 1, false));</script></p>
</div>

সত্যিই এই সম্প্রদায়টিতে আমরা উপরে উপরে দেওয়া @ ফয়েবসের মতো উত্তর পছন্দ করি।
অঙ্কিত পান্ডে

0

এখানে গণিতের একটি সহজ উদাহরণ ব্যবহার করা হচ্ছে। এটি কোনও নতুন বিকাশকারীকে কোনও কার্যে এটি কীভাবে ব্যবহার করতে হয় এবং এটি কী করে তা ধারণা পেতে সহায়তা করতে পারে। আশা করি এটা সাহায্য করবে!

<script>

var marks = 0;

function getRandomNumbers(){    //  generate a random number between 1 & 10
    var number = Math.floor((Math.random() * 10) + 1);
    return number;
}

function getNew(){  
/*  
    This function can create a new problem by generating two random numbers. When the page is loading as the first time, this function is executed with the onload event and the onclick event of "new" button.
*/
document.getElementById("ans").focus();
var num1 = getRandomNumbers();
var num2 = getRandomNumbers();
document.getElementById("num1").value = num1;
document.getElementById("num2").value = num2;

document.getElementById("ans").value ="";
document.getElementById("resultBox").style.backgroundColor = "maroon"
document.getElementById("resultBox").innerHTML = "***"

}

function checkAns(){
/*
    After entering the answer, the entered answer will be compared with the correct answer. 
        If the answer is correct, the text of the result box should be "Correct" with a green background and 10 marks should be added to the total marks.
        If the answer is incorrect, the text of the result box should be "Incorrect" with a red background and 3 marks should be deducted from the total.
        The updated total marks should be always displayed at the total marks box.
*/

var num1 = eval(document.getElementById("num1").value);
var num2 = eval(document.getElementById("num2").value);
var answer = eval(document.getElementById("ans").value);

if(answer==(num1+num2)){
    marks = marks + 10;
    document.getElementById("resultBox").innerHTML = "Correct";
    document.getElementById("resultBox").style.backgroundColor = "green";
    document.getElementById("totalMarks").innerHTML= "Total marks : " + marks;

}

else{
    marks = marks - 3;
    document.getElementById("resultBox").innerHTML = "Wrong";
    document.getElementById("resultBox").style.backgroundColor = "red";
    document.getElementById("totalMarks").innerHTML = "Total Marks: " + marks ;
}




}

</script>
</head>

<body onLoad="getNew()">
    <div class="container">
        <h1>Let's add numbers</h1>
        <div class="sum">
            <input id="num1" type="text" readonly> + <input id="num2" type="text" readonly>
        </div>
        <h2>Enter the answer below and click 'Check'</h2>
        <div class="answer">
            <input id="ans" type="text" value="">
        </div>
        <input id="btnchk" onClick="checkAns()" type="button" value="Check" >
        <div id="resultBox">***</div>
        <input id="btnnew" onClick="getNew()" type="button" value="New">
        <div id="totalMarks">Total marks : 0</div>  
    </div>
</body>
</html>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.