আমি কিভাবে একটি সংখ্যার দৈর্ঘ্য খুঁজে পেতে পারি?


161

আমি জাভাস্ক্রিপ্ট বা jQuery একটি সংখ্যা দৈর্ঘ্য পেতে খুঁজছেন?

আমি value.lengthকোনও সাফল্য ছাড়াই চেষ্টা করেছি , আমাকে কি প্রথমে এটিকে স্ট্রিংয়ে রূপান্তর করতে হবে?


3
হ্যাঁ, এটিকে স্ট্রিতে রূপান্তর করুন। কোনও সংখ্যার "দৈর্ঘ্য" ধারণাটি কেবল কয়েকটি সংখ্যার প্রতিনিধিত্বমূলক স্কিমের ক্ষেত্রে অর্থবোধক।
পয়েন্টটি

হ্যাঁ, আপনাকে প্রথমে স্ট্রিংতে রূপান্তর করতে হবে, IE (1234) .toString () দৈর্ঘ্য
ওসামা বারী

শীর্ষ 3 জবাবের জন্য
মাপদণ্ড

উত্তর:


304
var x = 1234567;

x.toString().length;

এই প্রক্রিয়াটি তাদের জন্য Float Numberএবং তাদের জন্যও কাজ করবে Exponential number


9
+1 করেছে। যদি কারও কাছে এটি সুস্পষ্ট না হয় তবে ফ্লোটের দশমিক পয়েন্টটি স্ট্রিংয়ের দৈর্ঘ্যে গণনা করা হবে। যেমন 2.5.to স্ট্রিং ()। দৈর্ঘ্যের আউটপুট 3
ড্যাডিং 84

1
@ ডেডিং ৮৪: আমি অনুমান করি ম্যাথ.ফ্লুর () এটি ঠিক করবে: ম্যাথ.ফ্লুর (99.5454) .তো স্ট্রিং () দৈর্ঘ্য === 2
ম্যানফ্রেড

7
এই সমাধানটি 20 টিরও বেশি সংখ্যক বৃহত সংখ্যক বা ছোট সংখ্যার সাথে কাজ করবে না। যেমন। 1.2e + 22 টু স্ট্রিং () দৈর্ঘ্যের আউটপুট 7
চেরিলজি

এটি লক্ষ করাও অত্যন্ত ধীর। আমি নোডে একটি পরীক্ষা করেছি এবং এটি আর্টুরসের উত্তর চেয়ে 1200% এর চেয়ে ধীর গতিতে দেখা গেছে।
অলিভার ডিকসন

1
এটি ভাল সমাধান নয়, উদাহরণস্বরূপ: কনস্ট ভাল = 0295; কনস্ট এক্স = ভাল.টোস্ট্রিং () দৈর্ঘ্য; কনসোল.লগ (এক্স) // আউটপুট: 3
করোলকার্প

82

ঠিক আছে, অনেক উত্তর, তবে এটি কেবল মজাদার জন্য বা ম্যাথটি গুরুত্বপূর্ণ বলে মনে রাখার জন্য এটি খাঁটি গণিত one

var len = Math.ceil(Math.log(num + 1) / Math.LN10);

এটি আসলে সংখ্যার "দৈর্ঘ্য" দেয় এমনকি এটি ক্ষতিকারক আকারে হলেও। numএখানে একটি অ-নেতিবাচক পূর্ণসংখ্যার বলে মনে করা হচ্ছে: এটি যদি নেতিবাচক হয় তবে এর নিখুঁত মানটি নিন এবং তারপরে সাইনটি সামঞ্জস্য করুন।

ES2015 এর জন্য আপডেট

এখন এটি Math.log10একটি জিনিস , আপনি সহজভাবে লিখতে পারেন

const len = Math.ceil(Math.log10(num + 1));

1
আমি মনে করি এই খাঁটি গণিতটি সবচেয়ে দক্ষ / দ্রুততম।
Noitidart

2
অ্যাভেসে পারফিউম ম্যান ধন্যবাদ। আমি গণিতের পথটি দেখিয়েছি ফলাফলগুলি দ্রুততম, আপনি কি এই ফলাফলটি পেয়েছেন? এখানে আমার ফলাফল: i.imgur.com/9BKxyd3.png
Noitidart

1
@ হুবার্টগ্রিজকোভিয়াক ওহ এটি দুর্দান্ত। আমি দেখতে পাচ্ছি যে পদ্ধতিটি মূলত যাইহোক একটি গণিত, তবে কিছু স্পিড হ্যাক সহ। এটি কমে Math.ceilএবং Math.absপরিবর্তে দ্রুত ব্যবহার করে। তবে আমি সত্যই ক্রোমে এই পারফরম্যান্স লাভের আশা করিনি ... জেনে ভাল লাগল!
ম্যাক্সআর্ট

3
নিখুঁত, তবে 0 এর পরিবর্তে আপনার সংখ্যা 0 হলে 0 দেয়
স্টেটলাইস

1
1e + 16 বা তারও বেশি এটি 1 কম দেয়, সুতরাং 1000000000000000000 17 এর পরিবর্তে 16 এবং আরও কিছু ফেরত দেয় ...
গোটি মেটাল

12

আমি এই কার্যকারিতাটি নোড.জেজে ব্যবহার করছি, এটি আমার এখন পর্যন্ত দ্রুত বাস্তবায়ন:

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সর্বজনীন সমর্থিত নয়।


কৌতূহল হিসাবে আমি এন-লেংথ পদ্ধতি বনাম টু স্ট্রিং () এর দৈর্ঘ্যের সাথে একটি জেসফিউর পরিবেশন করেছি .... jsperf.com/convert-number-to-string-and-get-leth/2
ইসরাফিল হাভিলা

হাহা, এটাই মূলত আমার দেওয়া সমাধান! এটি এত ভাল পারফরম্যান্স করতে পারে আমার ধারণা ছিল না।
ম্যাক্সআর্ট

2
আমি দুঃখিত, আমি সমাধানটি আবিষ্কার সম্পর্কে আমার সম্পর্কে কিছু বলেছিলাম বা এরকম কিছু? পোস্ট করার আগে আপনি কেন মনোযোগ দিয়ে পড়েন না? বিষয়টির জন্য, স্টিভেন ওল্ফ্রামের জন্মের আগেই আলগোরিদমটি আবিষ্কার করা হয়েছিল এবং যাইহোক আপনি যে পৃষ্ঠাটি সংযুক্ত করেছেন তাতে জাভাস্ক্রিপ্টে কোনও সমাধান দেওয়া হয় নাআমি করেছি, 9 মাস আগে আপনার।
ম্যাক্সআর্ট

1
"+1" সম্ভবত ম্যাথ.এবস কলের বাইরে থাকা উচিত: ম্যাথ.লগ (ম্যাথ.এবস (এন) + 1) ...
হুবার্ট গ্রাজেসকুইক

1
1e + 16 বা তারও বেশি এটি 1 কম দেয়, সুতরাং 1000000000000000000 17 এর পরিবর্তে 16 এবং আরও কিছু ফেরত দেয় ...
গোটি মেটাল

11

দৈর্ঘ্য নিতে আপনাকে সংখ্যাটি স্ট্রিংয়ে করতে হবে

var num = 123;

alert((num + "").length);

অথবা

alert(num.toString().length);

9

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

const num = 123456
`${num}`.length // 6

এটিই আমার পক্ষে একমাত্র উত্তর যা আমি 0 দিয়ে শুরু করে এমন একটি সংখ্যা গণনা করি
জেসিপিপি

5

সংখ্যাকে কোনও স্ট্রিনে রূপান্তর না করেই আপনি একটি মজাদার লুপ তৈরি করতে পারেন:

var number = 20000;
var length = 0;
for(i = number; i > 1; ++i){
     ++length;
     i = Math.floor(i/10);
}

alert(length);​

ডেমো: http://jsfiddle.net/maniator/G8tQE/


3
@ পয়েন্ট হ্যাঁ, এটি একটি পূর্ণসংখ্যা ধরে নিচ্ছে । এমনকি যদি আপনি এটি একটি স্ট্রিং করেন তবে .এটি গণনার অংশ হিসাবে অন্তর্ভুক্ত করবে ।
নফতালি ওরফে নীল

হ্যাঁ, যদিও এটি একটি আকর্ষণীয় দার্শনিক প্রশ্ন যা বিন্দুটিকে "দৈর্ঘ্য" :
পয়েন্টি

4

প্রথমে এটিকে স্ট্রিংয়ে রূপান্তর করুন:

var mynumber = 123;
alert((""+mynumber).length);

এতে একটি খালি স্ট্রিং যুক্ত করা সুস্পষ্টভাবে mynumberএকটি স্ট্রিংয়ে রূপান্তরিত করবে ।


1
1e + 16 যা 5 ফিরে আসে হিসাবে
এক্সপেনসেন্টালগুলির

4

এটি করার জন্য তিনটি উপায় রয়েছে।

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


4

আপনার সরলতম (স্ট্রিংলেন্থ) এর পক্ষে যাওয়া উচিত, পাঠযোগ্যতা সর্বদা গতি বজায় রাখে। তবে আপনি এখানে গতি সম্পর্কে যত্ন নিচে কিছু নিচে দেওয়া আছে।

তিনটি ভিন্ন পদ্ধতি সমস্ত পরিবর্তিত গতির সাথে।

// 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);
}

3

আমি একটি পরীক্ষায় অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি।

স্ট্রিংয়ে রূপান্তর না করে একটি সংখ্যার দৈর্ঘ্য সন্ধান করুন

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 ]

নেতিবাচক সংখ্যাগুলি এটি আরও জটিল করার জন্য যুক্ত করা হয়েছিল, সুতরাং ম্যাথ.এবস ()।


2

আমি @ নীলের উত্তরটি সংশোধন করতে চাই যা পূর্ণসংখ্যার পক্ষে বেশ ভাল ছিল তবে 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;
}


0

হ্যাঁ দৈর্ঘ্য সন্ধান করতে আপনাকে স্ট্রিংয়ে রূপান্তর করতে হবে For উদাহরণস্বরূপ

var x=100;// type of x is number
var x=100+"";// now the type of x is string
document.write(x.length);//which would output 3.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.