জাভাস্ক্রিপ্টে আপনি কীভাবে 1 দশমিক স্থানে যান?


378

দশমিক বিন্দু (সঠিকভাবে বৃত্তাকার) পরে আপনি জাভাস্ক্রিপ্টে একটি সংখ্যা 1 অক্ষরে গোল করতে পারেন?

আমি * 10, রাউন্ড, / 10 চেষ্টা করেছিলাম তবে এটি ইন্টের শেষে দুটি দশমিক ছেড়ে যায়।


9
Math.round(n * 10) / 10কাজ করে আপনার কোড কি?
বেন ফ্লেমিং

উত্তর:


729

Math.round(num * 10) / 10 কাজ করে, এখানে একটি উদাহরণ ...

var number = 12.3456789
var rounded = Math.round(number * 10) / 10
// rounded is 12.3

যদি আপনি এটির একটি দশমিক জায়গা থাকতে চান, এমনকি যখন এটি 0 হবে তখনও যুক্ত করুন ...

var fixed = rounded.toFixed(1)
// fixed is always to 1 d.p.
// NOTE: .toFixed() returns a string!

// To convert back to number format
parseFloat(number.toFixed(2))
// 12.34
// but that will not retain any trailing zeros

// So, just make sure it is the last step before output,
// and use a number format during calculations!

সম্পাদনা: নির্ভুল ফাংশন সহ বৃত্তাকার যোগ করুন ...

এই নীতিটি ব্যবহার করে, রেফারেন্সের জন্য, এখানে একটি সহজ সামান্য বৃত্তাকার ফাংশন যা যথার্থতা গ্রহণ করে ...

function round(value, precision) {
    var multiplier = Math.pow(10, precision || 0);
    return Math.round(value * multiplier) / multiplier;
}

... ব্যবহার ...

round(12345.6789, 2) // 12345.68
round(12345.6789, 1) // 12345.7

... নিকটতম পুরো সংখ্যার (যথাযথ 0) গোল করতে ডিফল্ট ...

round(12345.6789) // 12346

... এবং নিকটতম 10 বা 100 ইত্যাদির জন্য ব্যবহৃত হতে পারে ...

round(12345.6789, -1) // 12350
round(12345.6789, -2) // 12300

... এবং negativeণাত্মক সংখ্যার সঠিক পরিচালনা

round(-123.45, 1) // -123.4
round(123.45, 1) // 123.5

... এবং ধারাবাহিকভাবে স্ট্রিং হিসাবে ফর্ম্যাট করতে ToFixed এর সাথে একত্রিত হতে পারে ...

round(456.7, 2).toFixed(2) // "456.70"

45
.toFixed()আপনি সম্ভবত কোনও সংখ্যা চাইলে এটি একটি স্ট্রিং ফেরত দেয় তাই ব্যবহারে সতর্ক হন।
কবি

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

হুমম ... এটি উপলব্ধি করে, আপনি যে কোনও উপায়ে সংখ্যায় রূপান্তর করতে অবশ্যই সর্বদা ভুল ভ্রূণের শূন্যগুলি কেটে ফেলতে হবে, এ কারণেই এটি একটি স্ট্রিং থাকতে হবে। আমার ধারণা এটি প্রদর্শনের আগে সর্বদা শেষ পদক্ষেপ হওয়া উচিত, এবং গণনায় ব্যবহৃত হয় না।
বিলি মুন

2
.toFixed()এটি ব্যবহার করে সতর্ক থাকুন কারণ এটি বিভিন্ন ব্রাউজারগুলির জন্য বিভিন্ন বৃত্তাকার ফলাফল দিতে পারে। এই বিষয়ে বিস্তারিত জানার জন্য এই পোস্টটি পড়ুন !
উইল্ট করুন

1
কোনও ডিপি উপস্থিত না থাকলে আমি কি একটি শূন্য যুক্ত করতে পারি?
নিক

101
var number = 123.456;

console.log(number.toFixed(1)); // should round to 123.5

4
কখনও কখনও toFixed()বিঘ্ন ঘটে - আমি এটি একটি ক্রোম ব্রাউজারে দেখেছি যেখানে আমি কল করি toFixed(), তারপরে একটি স্ট্রিংয়ে রূপান্তর করি এবং এটি এমন কিছু দেখায় 10.00000000068- অদ্ভুত। যদিও এটি নির্ভরযোগ্যভাবে পুনরুত্পাদন করতে পারে না।
হামিশ গ্রুবিজন

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

1
উপরে @ কবি দ্বারা উল্লিখিত: আপনি যখন চাইবেন তখন যখন এটি ফিরে আসে তেমন ব্যবহারের বিষয়ে সাবধানতা অবলম্বন করুন.toFixed()StringNumber
রিকার্ডো

28

আপনি যদি ব্যবহার করেন তবে Math.round(5.01)আপনি তার 5পরিবর্তে পাবেন 5.0

আপনি যদি ব্যবহার করেন তবে toFixedআপনি রাউন্ডিং ইস্যুগুলিতে চলে যান

যদি আপনি উভয় বিশ্বের সেরা দুটি একত্রিত করতে চান:

(Math.round(5.01 * 10) / 10).toFixed(1)

আপনি এটির জন্য একটি ফাংশন তৈরি করতে চাইতে পারেন:

function roundedToFixed(_float, _digits){
  var rounded = Math.pow(10, _digits);
  return (Math.round(_float * rounded) / rounded).toFixed(_digits);
}

কেন প্যারামের জন্য আন্ডারস্কোরগুলি (_ ফ্লোট, _ ডিজিটস)? নিখরচায় একটি লিঙ্ক পোস্ট করুন যেখানে আমি নিজের জন্য উত্তরটি পেতে পারি। ধন্যবাদ
শার্ক লেজার্স


11

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

var rounded = ((num * 10) << 0) * 0.1;

তবে আরে, যেহেতু কোনও ফাংশন কল নেই তাই এটি দুষ্টু দ্রুত। :)

এবং এখানে স্ট্রিং মিল ব্যবহার করে এমন একটি:

var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2');

আমি বলি স্ট্রিং ভেরিয়েন্টটি ব্যবহার করার পরামর্শ দিচ্ছি না in


7

এটি দিয়ে চেষ্টা করুন:

var original=28.453

// 1.- round "original" to two decimals
var result = Math.round (original * 100) / 100  //returns 28.45

// 2.- round "original" to 1 decimal
var result = Math.round (original * 10) / 10  //returns 28.5

// 3.- round 8.111111 to 3 decimals
var result = Math.round (8.111111 * 1000) / 1000  //returns 8.111

প্রয়োগ করা কম জটিল এবং সহজ ...

এটির সাহায্যে আপনি একটি ফাংশন তৈরি করতে পারেন:

function RoundAndFix (n, d) {
    var m = Math.pow (10, d);
    return Math.round (n * m) / m;
}

সম্পাদনা : রাউন্ড হাফ ইউপি ব্যবহার করে এটি কীভাবে গোল করবেন তা দেখুন। রাউন্ডিং মোড যা আমাদের বেশিরভাগ গ্রেড স্কুলে পড়ানো হয়েছিল


নোপ: রাউন্ডএন্ডফিক্স (1.005, 2)
নয়েও


4

শুধু না কেন

let myNumber = 213.27321;
+myNumber.toFixed(1); // => 213.3
  1. toFixed : একটি স্ট্রিং প্রদত্ত সংখ্যার নির্দিষ্ট বিন্দু স্বরলিপি ব্যবহার প্রতিনিধিত্বমূলক ফেরৎ।
  2. ইউনারি প্লাস (+) : অ্যানারি প্লাস অপারেটর তার অপারেন্ডের আগে এবং তার অপারেন্ডে মূল্যায়ন করে তবে এটি ইতিমধ্যে যদি না হয় তবে এটি একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করে।


3

সেরা উত্তরটি সম্পূর্ণ করতে:

var round = function ( number, precision )
{
    precision = precision || 0;
    return parseFloat( parseFloat( number ).toFixed( precision ) );
}

ইনপুট প্যারামিটার নম্বরটি সর্বদা "না" হতে পারে, এক্ষেত্রে .toFixed বিদ্যমান নেই।


3

স্বীকৃত উত্তরের ES 6 সংস্করণ:

function round(value, precision) {
    const multiplier = 10 ** (precision || 0);
    return Math.round(value * multiplier) / multiplier;
}

3

টপপ্রেশান পদ্ধতিটি ব্যবহার করে:

var a = 1.2345
a.toPrecision(2)

// result "1.2"

এখন পর্যন্ত আমি সবচেয়ে ভাল উত্তর চেষ্টা করেছি। ধন্যবাদ।
স্টে

তবে আপনার যত্নবান হতে হবে কারণ 12.345.toPrecision( 2 )তা "12"
জোশুয়া পিন্টার

2

যদি আপনার পদ্ধতিটি কাজ না করে তবে plz আপনার কোড পোস্ট করুন।

তবে আপনি গোলটি বন্ধ কাজটি সম্পন্ন করতে পারবেন:

var value = Math.round(234.567*100)/100

আপনাকে 234.56 দেবে

একভাবে

 var value = Math.round(234.567*10)/10

234.5 দেবে

এইভাবে আপনি উপরের হিসাবে ধ্রুবকের জায়গায় ভেরিয়েবল ব্যবহার করতে পারেন।


1

ছোট্ট কৌণিক ফিল্টার যদি কেউ এটি চায়:

angular.module('filters').filter('decimalPlace', function() {
    return function(num, precision) {
        var multiplier = Math.pow(10, precision || 0);
        return Math.round(num * multiplier) / multiplier;
    };
});

এর মাধ্যমে যদি ব্যবহার করুন:

{{model.value| decimalPlace}}
{{model.value| decimalPlace:1}}
{{model.value| decimalPlace:2}}

:)


1

সাধারণভাবে, স্কেলিংয়ের মাধ্যমে রাউন্ডিং করা হয়: round(num / p) * p

সূচকীয় স্বরলিপি ব্যবহার করে সঠিকভাবে + ve সংখ্যার বৃত্তাকার পরিচালনা করে। তবে, এই পদ্ধতিটি সঠিকভাবে বৃত্তাকার প্রান্তের ক্ষেত্রে ব্যর্থ হয়।

function round(num, precision = 2) {
	var scaled = Math.round(num + "e" + precision);
	return Number(scaled + "e" + -precision);
}

// testing some edge cases
console.log( round(1.005, 2) );  // 1.01 correct
console.log( round(2.175, 2) );  // 2.18 correct
console.log( round(5.015, 2) );  // 5.02 correct

console.log( round(-1.005, 2) );  // -1    wrong
console.log( round(-2.175, 2) );  // -2.17 wrong
console.log( round(-5.015, 2) );  // -5.01 wrong

এখানেও গাণিতিক গোলটি করার জন্য লিখেছি এমন একটি ফাংশন, আপনি নিজে এটি পরীক্ষা করতে পারেন।

/**
 * MidpointRounding away from zero ('arithmetic' rounding)
 * Uses a half-epsilon for correction. (This offsets IEEE-754
 * half-to-even rounding that was applied at the edge cases).
 */

function RoundCorrect(num, precision = 2) {
	// half epsilon to correct edge cases.
	var c = 0.5 * Number.EPSILON * num;
//	var p = Math.pow(10, precision); //slow
	var p = 1; while (precision--> 0) p *= 10;
	if (num < 0)
		p *= -1;
	return Math.round((num + c) * p) / p;
}

// testing some edge cases
console.log(RoundCorrect(1.005, 2));  // 1.01 correct
console.log(RoundCorrect(2.175, 2));  // 2.18 correct
console.log(RoundCorrect(5.015, 2));  // 5.02 correct

console.log(RoundCorrect(-1.005, 2));  // -1.01 correct
console.log(RoundCorrect(-2.175, 2));  // -2.18 correct
console.log(RoundCorrect(-5.015, 2));  // -5.02 correct


0

আমি মনে করি এটির যে কোনও কিছুতেই এটি নির্ভরযোগ্যভাবে কাজ করে বলে মনে হচ্ছে:

function round(val, multiplesOf) {
  var s = 1 / multiplesOf;
  var res = Math.ceil(val*s)/s;
  res = res < val ? res + multiplesOf: res;
  var afterZero = multiplesOf.toString().split(".")[1];
  return parseFloat(res.toFixed(afterZero ? afterZero.length : 0));
}

এটি চক্রাকার হয়ে যায়, তাই আপনার ব্যবহারের ক্ষেত্রে এটি অনুযায়ী পরিবর্তন করতে হবে। এই কাজ করা উচিত:

console.log(round(10.01, 1)); //outputs 11
console.log(round(10.01, 0.1)); //outputs 10.1

0

আপনি যদি যথাযথ গোল করার বিষয়ে চিন্তা করেন তবে:

function roundNumericStrings(str , numOfDecPlacesRequired){ 
     var roundFactor = Math.pow(10, numOfDecPlacesRequired);  
     return (Math.round(parseFloat(str)*roundFactor)/roundFactor).toString();  }

অন্যথায় যদি আপনি না করেন তবে আপনার ইতিমধ্যে পূর্ববর্তী পোস্টগুলির একটি উত্তর রয়েছে

str.slice(0, -1)

0

Math.round( num * 10) / 10 কাজ করে না

উদাহরণস্বরূপ, 1455581777.8-145558160.4আপনাকে দেয় 1310023617.3999999

সুতরাং শুধুমাত্র ব্যবহার num.toFixed(1)


0

আমি এমন একটি তৈরি করেছি যা সংখ্যার প্রকারটি দেয় এবং কেবলমাত্র প্রয়োজন হলে দশমিকেরও স্থান রাখি (0 প্যাডিং নেই)।

উদাহরণ:

roundWithMaxPrecision(11.234, 2); //11.23
roundWithMaxPrecision(11.234, 1); //11.2
roundWithMaxPrecision(11.234, 4); //11.23
roundWithMaxPrecision(11.234, -1); //10

roundWithMaxPrecision(4.2, 2); //4.2
roundWithMaxPrecision(4.88, 1); //4.9

কোড:

function roundWithMaxPrecision (n, precision) {
    return Math.round(n * Math.pow(10, precision)) / Math.pow(10, precision);
}

0

যথার্থ সমস্যাগুলি এড়াতে একটি উপায় খুঁজে পেয়েছি:

function badRound (num, precision) {
    const x = 10 ** precision;
    return Math.round(num * x) / x
}
// badRound(1.005, 2) --> 1

function round (num, precision) {
    const x = 10 ** (precision + 1);
    const y = 10 ** precision;
    return Math.round(Math.round(num * x) / 10) / y
}
// round(1.005, 2) --> 1.01

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