দশমিক বিন্দু (সঠিকভাবে বৃত্তাকার) পরে আপনি জাভাস্ক্রিপ্টে একটি সংখ্যা 1 অক্ষরে গোল করতে পারেন?
আমি * 10, রাউন্ড, / 10 চেষ্টা করেছিলাম তবে এটি ইন্টের শেষে দুটি দশমিক ছেড়ে যায়।
দশমিক বিন্দু (সঠিকভাবে বৃত্তাকার) পরে আপনি জাভাস্ক্রিপ্টে একটি সংখ্যা 1 অক্ষরে গোল করতে পারেন?
আমি * 10, রাউন্ড, / 10 চেষ্টা করেছিলাম তবে এটি ইন্টের শেষে দুটি দশমিক ছেড়ে যায়।
উত্তর:
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"
.toFixed()আপনি সম্ভবত কোনও সংখ্যা চাইলে এটি একটি স্ট্রিং ফেরত দেয় তাই ব্যবহারে সতর্ক হন।
parseFloatব্যবহারটি .toFixed()যদি পুরো সংখ্যা (শূন্য) হয় তবে এর দশমিক দশকে বাদ দেবে । সাধারণত, আপনি যদি গণিত করতে চান তবে আপনার প্রথম উদাহরণটি অনুসরণ করা ভাল। আপনি যদি আপনার ইউআইতে কোনও নম্বর প্রদর্শন করতে চান তবে ব্যবহার করুন .toFixed()।
.toFixed()এটি ব্যবহার করে সতর্ক থাকুন কারণ এটি বিভিন্ন ব্রাউজারগুলির জন্য বিভিন্ন বৃত্তাকার ফলাফল দিতে পারে। এই বিষয়ে বিস্তারিত জানার জন্য এই পোস্টটি পড়ুন !
var number = 123.456;
console.log(number.toFixed(1)); // should round to 123.5
toFixed()বিঘ্ন ঘটে - আমি এটি একটি ক্রোম ব্রাউজারে দেখেছি যেখানে আমি কল করি toFixed(), তারপরে একটি স্ট্রিংয়ে রূপান্তর করি এবং এটি এমন কিছু দেখায় 10.00000000068- অদ্ভুত। যদিও এটি নির্ভরযোগ্যভাবে পুনরুত্পাদন করতে পারে না।
.toFixed()StringNumber
আপনি যদি ব্যবহার করেন তবে 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);
}
আমি ভোট দিয়েছি toFixed(), কিন্তু, রেকর্ডের জন্য, এখানে আরও একটি উপায় যা সংখ্যায় অন্তর্ভুক্ত করতে বিট শিফটিং ব্যবহার করে। সুতরাং, এটি সর্বদা শূন্যের দিকে গোল হয় (ধনাত্মক সংখ্যার জন্য নীচে, negativeণাত্মক পর্যন্ত)।
var rounded = ((num * 10) << 0) * 0.1;
তবে আরে, যেহেতু কোনও ফাংশন কল নেই তাই এটি দুষ্টু দ্রুত। :)
এবং এখানে স্ট্রিং মিল ব্যবহার করে এমন একটি:
var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2');
আমি বলি স্ট্রিং ভেরিয়েন্টটি ব্যবহার করার পরামর্শ দিচ্ছি না in
এটি দিয়ে চেষ্টা করুন:
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;
}
সম্পাদনা : রাউন্ড হাফ ইউপি ব্যবহার করে এটি কীভাবে গোল করবেন তা দেখুন। রাউন্ডিং মোড যা আমাদের বেশিরভাগ গ্রেড স্কুলে পড়ানো হয়েছিল
শুধু না কেন
let myNumber = 213.27321;
+myNumber.toFixed(1); // => 213.3
var num = 34.7654;
num = Math.round(num * 10) / 10;
console.log(num); // Logs: 34.8
স্বীকৃত উত্তরের ES 6 সংস্করণ:
function round(value, precision) {
const multiplier = 10 ** (precision || 0);
return Math.round(value * multiplier) / multiplier;
}
টপপ্রেশান পদ্ধতিটি ব্যবহার করে:
var a = 1.2345
a.toPrecision(2)
// result "1.2"
12.345.toPrecision( 2 )তা "12"।
যদি আপনার পদ্ধতিটি কাজ না করে তবে plz আপনার কোড পোস্ট করুন।
তবে আপনি গোলটি বন্ধ কাজটি সম্পন্ন করতে পারবেন:
var value = Math.round(234.567*100)/100
আপনাকে 234.56 দেবে
একভাবে
var value = Math.round(234.567*10)/10
234.5 দেবে
এইভাবে আপনি উপরের হিসাবে ধ্রুবকের জায়গায় ভেরিয়েবল ব্যবহার করতে পারেন।
ছোট্ট কৌণিক ফিল্টার যদি কেউ এটি চায়:
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}}
:)
সাধারণভাবে, স্কেলিংয়ের মাধ্যমে রাউন্ডিং করা হয়: 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
আমি মনে করি এটির যে কোনও কিছুতেই এটি নির্ভরযোগ্যভাবে কাজ করে বলে মনে হচ্ছে:
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
আপনি যদি যথাযথ গোল করার বিষয়ে চিন্তা করেন তবে:
function roundNumericStrings(str , numOfDecPlacesRequired){
var roundFactor = Math.pow(10, numOfDecPlacesRequired);
return (Math.round(parseFloat(str)*roundFactor)/roundFactor).toString(); }
অন্যথায় যদি আপনি না করেন তবে আপনার ইতিমধ্যে পূর্ববর্তী পোস্টগুলির একটি উত্তর রয়েছে
str.slice(0, -1)
আমি এমন একটি তৈরি করেছি যা সংখ্যার প্রকারটি দেয় এবং কেবলমাত্র প্রয়োজন হলে দশমিকেরও স্থান রাখি (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);
}
যথার্থ সমস্যাগুলি এড়াতে একটি উপায় খুঁজে পেয়েছি:
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
Math.round(n * 10) / 10কাজ করে আপনার কোড কি?