আমি জাভাস্ক্রিপ্ট বা jQuery একটি সংখ্যা দৈর্ঘ্য পেতে খুঁজছেন?
আমি value.lengthকোনও সাফল্য ছাড়াই চেষ্টা করেছি , আমাকে কি প্রথমে এটিকে স্ট্রিংয়ে রূপান্তর করতে হবে?
আমি জাভাস্ক্রিপ্ট বা jQuery একটি সংখ্যা দৈর্ঘ্য পেতে খুঁজছেন?
আমি value.lengthকোনও সাফল্য ছাড়াই চেষ্টা করেছি , আমাকে কি প্রথমে এটিকে স্ট্রিংয়ে রূপান্তর করতে হবে?
উত্তর:
var x = 1234567;
x.toString().length;
এই প্রক্রিয়াটি তাদের জন্য Float Numberএবং তাদের জন্যও কাজ করবে Exponential number।
ঠিক আছে, অনেক উত্তর, তবে এটি কেবল মজাদার জন্য বা ম্যাথটি গুরুত্বপূর্ণ বলে মনে রাখার জন্য এটি খাঁটি গণিত one
var len = Math.ceil(Math.log(num + 1) / Math.LN10);
এটি আসলে সংখ্যার "দৈর্ঘ্য" দেয় এমনকি এটি ক্ষতিকারক আকারে হলেও। numএখানে একটি অ-নেতিবাচক পূর্ণসংখ্যার বলে মনে করা হচ্ছে: এটি যদি নেতিবাচক হয় তবে এর নিখুঁত মানটি নিন এবং তারপরে সাইনটি সামঞ্জস্য করুন।
এখন এটি Math.log10একটি জিনিস , আপনি সহজভাবে লিখতে পারেন
const len = Math.ceil(Math.log10(num + 1));
Math.ceilএবং Math.absপরিবর্তে দ্রুত ব্যবহার করে। তবে আমি সত্যই ক্রোমে এই পারফরম্যান্স লাভের আশা করিনি ... জেনে ভাল লাগল!
আমি এই কার্যকারিতাটি নোড.জেজে ব্যবহার করছি, এটি আমার এখন পর্যন্ত দ্রুত বাস্তবায়ন:
var nLength = function(n) {
return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1;
}
এটি ইতিবাচক এবং negativeণাত্মক পূর্ণসংখ্যাগুলি হ'ল (তাত্পর্যপূর্ণ আকারেও) এবং ভাসমান অংশের পূর্ণসংখ্যার অংশের দৈর্ঘ্য ফিরিয়ে আনতে হবে।
নিম্নলিখিত রেফারেন্সটি পদ্ধতিটির কিছুটা অন্তর্দৃষ্টি প্রদান করা উচিত: ওয়েইস্টেইন, এরিক ডব্লিউ "" সংখ্যা দৈর্ঘ্য। " ম্যাথওয়ার্ল্ড থেকে - একটি ওল্ফ্রাম ওয়েব রিসোর্স।
আমি বিশ্বাস করি যে কিছু বিটওয়াইজ অপারেশন ম্যাথ.এবসকে প্রতিস্থাপন করতে পারে তবে jsperf দেখায় যে ম্যাথ.এবস বেশিরভাগ জেএস ইঞ্জিনগুলিতে ঠিক কাজ করে।
আপডেট : মন্তব্যে উল্লিখিত হিসাবে, এই সমাধানটিতে কিছু সমস্যা রয়েছে :(
আপডেট 2 (কার্যনির্বাহী) : আমি বিশ্বাস করি যে এক পর্যায়ে যথার্থ সমস্যাগুলি লাঞ্ছিত হয় এবং ন্যায়বিচার Math.log(...)*0.434...অপ্রত্যাশিতভাবে আচরণ করে। তবে, যদি ইন্টারনেট এক্সপ্লোরার বা মোবাইল ডিভাইসগুলি আপনার চায়ের কাপ না হয় তবে আপনি এই ক্রিয়াকলাপটি Math.log10ফাংশনটির সাথে প্রতিস্থাপন করতে পারেন । নোড.জেজে আমি ফাংশনটির সাথে একটি দ্রুত বুনিয়াদি পরীক্ষা লিখেছিলাম nLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;এবং Math.log10এটি দিয়ে প্রত্যাশা অনুযায়ী কাজ করেছি। দয়া করে নোট করুন যে Math.log10সর্বজনীন সমর্থিত নয়।
সংখ্যাকে কোনও স্ট্রিনে রূপান্তর না করেই আপনি একটি মজাদার লুপ তৈরি করতে পারেন:
var number = 20000;
var length = 0;
for(i = number; i > 1; ++i){
++length;
i = Math.floor(i/10);
}
alert(length);
.এটি গণনার অংশ হিসাবে অন্তর্ভুক্ত করবে ।
প্রথমে এটিকে স্ট্রিংয়ে রূপান্তর করুন:
var mynumber = 123;
alert((""+mynumber).length);
এতে একটি খালি স্ট্রিং যুক্ত করা সুস্পষ্টভাবে mynumberএকটি স্ট্রিংয়ে রূপান্তরিত করবে ।
এটি করার জন্য তিনটি উপায় রয়েছে।
var num = 123;
alert(num.toString().length);
ভাল পারফরম্যান্স এক (ie11 এর সেরা পারফরম্যান্স)
var num = 123;
alert((num + '').length);
গণিত (ক্রোম, ফায়ারফক্সে সেরা পারফরম্যান্স তবে 11 এর চেয়ে ধীরতম)
var num = 123
alert(Math.floor( Math.log(num) / Math.LN10 ) + 1)
এখানে একটি jspref আছে http://jsperf.com/fastest-way-to-get-the-first-in-a-number/2
আপনার সরলতম (স্ট্রিংলেন্থ) এর পক্ষে যাওয়া উচিত, পাঠযোগ্যতা সর্বদা গতি বজায় রাখে। তবে আপনি এখানে গতি সম্পর্কে যত্ন নিচে কিছু নিচে দেওয়া আছে।
তিনটি ভিন্ন পদ্ধতি সমস্ত পরিবর্তিত গতির সাথে।
// 34ms
let weissteinLength = function(n) {
return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1;
}
// 350ms
let stringLength = function(n) {
return n.toString().length;
}
// 58ms
let mathLength = function(n) {
return Math.ceil(Math.log(n + 1) / Math.LN10);
}
// Simple tests below if you care about performance.
let iterations = 1000000;
let maxSize = 10000;
// ------ Weisstein length.
console.log("Starting weissteinLength length.");
let startTime = Date.now();
for (let index = 0; index < iterations; index++) {
weissteinLength(Math.random() * maxSize);
}
console.log("Ended weissteinLength length. Took : " + (Date.now() - startTime ) + "ms");
// ------- String length slowest.
console.log("Starting string length.");
startTime = Date.now();
for (let index = 0; index < iterations; index++) {
stringLength(Math.random() * maxSize);
}
console.log("Ended string length. Took : " + (Date.now() - startTime ) + "ms");
// ------- Math length.
console.log("Starting math length.");
startTime = Date.now();
for (let index = 0; index < iterations; index++) {
mathLength(Math.random() * maxSize);
}
আমি একটি পরীক্ষায় অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি।
স্ট্রিংয়ে রূপান্তর না করে একটি সংখ্যার দৈর্ঘ্য সন্ধান করুন
const numbers = [1, 10, 100, 12, 123, -1, -10, -100, -12, -123, 0, -0]
const numberLength = number => {
let length = 0
let n = Math.abs(number)
do {
n /= 10
length++
} while (n >= 1)
return length
}
console.log(numbers.map(numberLength)) // [ 1, 2, 3, 2, 3, 1, 2, 3, 2, 3, 1, 1 ]
নেতিবাচক সংখ্যাগুলি এটি আরও জটিল করার জন্য যুক্ত করা হয়েছিল, সুতরাং ম্যাথ.এবস ()।
আমি @ নীলের উত্তরটি সংশোধন করতে চাই যা পূর্ণসংখ্যার পক্ষে বেশ ভাল ছিল তবে 1 নম্বরটি আগের ক্ষেত্রে 0 এর দৈর্ঘ্য ফিরিয়ে আনবে।
function Longueur(numberlen)
{
var length = 0, i; //define `i` with `var` as not to clutter the global scope
numberlen = parseInt(numberlen);
for(i = numberlen; i >= 1; i)
{
++length;
i = Math.floor(i/10);
}
return length;
}