मैं जावास्क्रिप्ट या jQuery में एक संख्या की लंबाई प्राप्त करना चाहता हूं?
मैंने value.lengthबिना किसी सफलता के प्रयास किया है , क्या मुझे इसे पहले एक स्ट्रिंग में बदलने की आवश्यकता है?
मैं जावास्क्रिप्ट या jQuery में एक संख्या की लंबाई प्राप्त करना चाहता हूं?
मैंने value.lengthबिना किसी सफलता के प्रयास किया है , क्या मुझे इसे पहले एक स्ट्रिंग में बदलने की आवश्यकता है?
जवाबों:
var x = 1234567;
x.toString().length;
यह प्रक्रिया भी Float Numberऔर इसके लिए Exponential numberभी काम करेगी ।
ठीक है, इतने सारे उत्तर, लेकिन यह एक शुद्ध गणित है, सिर्फ मज़े के लिए या यह याद रखने के लिए कि गणित महत्वपूर्ण है:
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;
}
इसे सकारात्मक और नकारात्मक पूर्णांक (घातीय रूप में भी) को संभालना चाहिए और तैरने में पूर्णांक के भाग की लंबाई वापस करनी चाहिए।
निम्नलिखित संदर्भ को विधि में कुछ अंतर्दृष्टि प्रदान करनी चाहिए: वीसस्टीन, एरिक डब्ल्यू। "संख्या की लंबाई।" मैथवर्ल्ड से - एक वुल्फ्राम वेब संसाधन।
मेरा मानना है कि कुछ बिटवाइज़ ऑपरेशन Math.abs की जगह ले सकते हैं, लेकिन jsperf यह दर्शाता है कि बहुमत के js इंजन में Math.abs ठीक काम करता है।
अद्यतन : टिप्पणियों में उल्लेख किया गया है, इस समाधान में कुछ मुद्दे हैं :(
Update2 (वैकल्पिक हल) : मुझे विश्वास है कि कुछ बिंदु परिशुद्धता के मुद्दों में लात और कम से Math.log(...)*0.434...सिर्फ अप्रत्याशित रूप से व्यवहार करता है। हालांकि, अगर इंटरनेट एक्सप्लोरर या मोबाइल डिवाइस आपके चाय के कप नहीं हैं, तो आप इस ऑपरेशन को Math.log10फ़ंक्शन के साथ बदल सकते हैं । Node.js में मैंने फंक्शन के साथ एक क्विक बेसिक टेस्ट लिखा 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);
गणित (क्रोम में सर्वश्रेष्ठ प्रदर्शन, फ़ायरफ़ॉक्स लेकिन ie11 में सबसे धीमा)
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
आपको सबसे सरल एक (stringLength) के लिए जाना चाहिए, पठनीयता हमेशा गति को धड़कती है। लेकिन अगर आप यहाँ गति के बारे में परवाह करते हैं तो कुछ नीचे हैं।
तीन अलग-अलग विधियां अलग-अलग गति के साथ।
// 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 ]
इसे थोड़ा और जटिल करने के लिए ऋणात्मक संख्याएँ जोड़ी गईं, इसलिए Math.abs ()।
मैं @ उत्तर को सही करना चाहूंगा जो पूर्णांकों के लिए बहुत अच्छा था, लेकिन नंबर 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;
}