জাভাস্ক্রিপ্ট রাউন্ডঅফ নম্বর নিকটতম 0.5


100


কেউ কী আমাকে একটি ধারণা দিতে পারেন যে আমি কীভাবে নিকটতম ০.০ তে কোনও সংখ্যাকে ঘিরে ফেলতে পারি?
আমাকে স্ক্রিন রেজোলিউশন অনুযায়ী একটি ওয়েব পৃষ্ঠায় উপাদানগুলি স্কেল করতে হবে এবং তার জন্য আমি কেবল pts এ 1, 1.5 বা 2 এবং এর পরে ইত্যাদিতে ফন্টের আকার নির্ধারণ করতে পারি

আমি যদি এটি গোল করে তবে এটি 1 দশমিক জায়গায় বা কোনওটিই হয় না। আমি এই কাজটি কীভাবে সম্পাদন করতে পারি?

উত্তর:


194

আপনার নিজের ফাংশনটি লিখুন যা 2, রাউন্ডগুলি এবং তারপরে 2 দিয়ে ভাগ করে, উদাহরণস্বরূপ

function roundHalf(num) {
    return Math.round(num*2)/2;
}

9 টি দশমিক পয়েন্ট ... (সংখ্যা * 100) / 100 পুরোপুরিভাবে কাজ করে যা ফিরে আসার জন্য মুদ্রাগত মানগুলিতে একটি হ্রাসকরণ ফাংশন পরিষ্কার করতে কেবল এটি ব্যবহার করেছেন।
ডাস্টিন ক্রেইডলার

আপনি যদি ১৩.০ বা ১৩.৫ এর সাথে শেষ করতে চান তবে আমি আপনার উত্তরটি নীচের একটিটির সাথে একত্রিত করেছি: ফাংশন রাউন্ডহাল্ফ (নাম্বার) {রিটার্ন (ম্যাথ.াউন্ড (নাম্বার * 2) / 2) .ফটসড (1); }
ডান ডি

* 2 নাম্বারটি গোল করা সমস্ত ক্ষেত্রে কাজ করে না..আপনার সূত্র ব্যবহার করে 15.27 => এর মতো দশমিক চেষ্টা করুন => 15 দেবে যেখানে বাস্তবে এটি 15.5 এ ফিরে আসা উচিত। **** আমি মনে করি টু ফিক্সড ব্যবহার করা আরও ভাল হবে (নাম্বার 2 2)। টু ফিক্সড () / 2
এসএফডিএক্স বোম্ব

@sfdxbomb আপনি কি এটি পরীক্ষা করেছেন? আমার ব্রাউজারের কনসোলে roundHalf(15.27)15.5
ম্যালারেস

83

এখানে আরও সাধারণ সমাধান যা আপনার পক্ষে কার্যকর হতে পারে:

function round(value, step) {
    step || (step = 1.0);
    var inv = 1.0 / step;
    return Math.round(value * inv) / inv;
}

round(2.74, 0.1) = 2.7

round(2.74, 0.25) = 2.75

round(2.74, 0.5) = 2.5

round(2.74, 1.0) = 3.0


4
কী invমানে? কী invপরিবর্তনশীল প্রতিনিধিত্ব করে?
দেিলান

4
আমি চাই @Deilan inverse
অ্যালেক্স কে

3

নিউট্রন দ্বারা শীর্ষস্থানীয় উত্তরটি কেবলমাত্র 0.5 টিরও বেশি বাড়ানোর জন্য

function roundByNum(num, rounder) {
    var multiplier = 1/(rounder||0.5);
    return Math.round(num*multiplier)/multiplier;
}

console.log(roundByNum(74.67)); //expected output 74.5
console.log(roundByNum(74.67, 0.25)); //expected output 74.75
console.log(roundByNum(74.67, 4)); //expected output 76


2

Math.round(-0.5)ফেরৎ 0 , কিন্তু এটি হওয়া উচিত -1 গণিত নিয়ম অনুযায়ী।

আরও তথ্য: ম্যাথ.াউন্ড () এবং সংখ্যা.প্রোটোটাইপ.টো ফিক্সড ()

function round(number) {
    var value = (number * 2).toFixed() / 2;
    return value;
}

4
@ ইউরি আপনি যা বলছেন তার প্রসারিত করতে, roundপ্রদত্ত মানের চেয়ে পরবর্তী পূর্ণসংখ্যার দিকে ঘুরতে হবে , যা নেতিবাচক সংখ্যার দিক থেকে ধনাত্মক পূর্ণসংখ্য বর্ণালির দিকে হবে। -2.5 হবে -2 এ। এটা কি ঠিক?
ড্যানি বুলিস

হ্যাঁ এখনই যাচাই করা হয়েছে। Math.ceil(-1.75) == -1এবং Math.floor(-1.75) == -2। সুতরাং যে কেউ এর দ্বারা ছিটকে যাওয়ার জন্য, এটি কেবল সংখ্যার চেয়ে বেশিceil রিটার্ন হিসাবে মনে করে, সংখ্যার চেয়ে কম ফেরত দেয় । floor
ড্যানি বুলিস

2

উপরের সমস্ত উত্তরের কেবল একটি প্রত্যাহারযোগ্য সংস্করণ:

Math.round(valueToRound / 0.5) * 0.5;

জেনেরিক:

Math.round(valueToRound / step) * step;

1
    function roundToTheHalfDollar(inputValue){
      var percentile = Math.round((Math.round(inputValue*Math.pow(10,2))/Math.pow(10,2)-parseFloat(Math.trunc(inputValue)))*100)
      var outputValue = (0.5 * (percentile >= 25 ? 1 : 0)) + (0.5 * (percentile >= 75 ? 1 : 0))
      return Math.trunc(inputValue) + outputValue
    }

তুনাকীর আরও ভাল সাড়া দেখার আগে আমি এটি লিখেছিলাম;)


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.