Saya ingin mendapatkan panjang angka dalam JavaScript atau jQuery?
Saya sudah mencoba value.length
tanpa hasil, apakah saya perlu mengonversinya menjadi string terlebih dahulu?
javascript
jquery
Kode Junkie
sumber
sumber
Jawaban:
Proses ini juga akan bekerja untuk
Float Number
dan untukExponential number
juga.sumber
Ok, begitu banyak jawaban, tetapi ini adalah matematika murni, hanya untuk bersenang-senang atau mengingat bahwa Matematika itu Penting:
Ini sebenarnya memberikan "panjang" angka bahkan jika itu dalam bentuk eksponensial.
num
seharusnya bilangan bulat bukan negatif di sini: jika bilangan negatif, ambil nilai absolutnya dan sesuaikan tanda setelahnya.Pembaruan untuk ES2015
Sekarang
Math.log10
adalah suatu hal , Anda cukup menulissumber
Math.ceil
dan menggunakan yang lebih cepatMath.abs
sebagai gantinya. Tapi sejujurnya saya tidak mengharapkan kenaikan kinerja di Chrome ... Senang tahu!Saya telah menggunakan fungsi ini di node.js, ini adalah implementasi tercepat saya sejauh ini:
Ini harus menangani bilangan bulat positif dan negatif (juga dalam bentuk eksponensial) dan harus mengembalikan panjang bagian bilangan bulat dalam pelampung.
Referensi berikut harus memberikan beberapa wawasan tentang metode ini: Weisstein, Eric W. "Panjang Angka." Dari MathWorld - Sumber Daya Web Wolfram.
Saya percaya bahwa beberapa operasi bitwise dapat menggantikan Math.abs, tetapi jsperf menunjukkan bahwa Math.abs bekerja dengan baik di sebagian besar mesin js.
Pembaruan : Seperti disebutkan dalam komentar, solusi ini memiliki beberapa masalah :(
Update2 (pemecahan masalah) : Saya percaya bahwa pada suatu titik masalah presisi muncul dan orang yang
Math.log(...)*0.434...
berperilaku tidak terduga. Namun, jika Internet Explorer atau perangkat Mobile bukan secangkir teh Anda, Anda dapat mengganti operasi ini denganMath.log10
fungsinya. Di Node.js saya menulis tes dasar cepat dengan fungsinLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;
dan denganMath.log10
itu berfungsi seperti yang diharapkan. Harap dicatat bahwaMath.log10
tidak didukung secara universal.sumber
Anda harus membuat angka ke string agar panjang
atau
sumber
Bisa juga menggunakan string templat:
sumber
Baik tanpa mengonversi bilangan bulat menjadi string, Anda dapat membuat lingkaran yang funky:
Demo: http://jsfiddle.net/maniator/G8tQE/
sumber
.
sebagai bagian dari perhitungan.Konversikan dulu menjadi string:
Menambahkan string kosong ke dalamnya akan secara implisit menyebabkan
mynumber
berubah menjadi string.sumber
Ada tiga cara untuk melakukannya.
kinerja yang lebih baik (kinerja terbaik dalam ie11)
Matematika (kinerja terbaik di Chrome, firefox tetapi paling lambat di ie11)
ada jspref di sini http://jsperf.com/fastest-way-to-get-the-first-in-a-nn//
sumber
Anda harus menggunakan yang paling sederhana (stringLength), keterbacaan selalu mengalahkan kecepatan. Tetapi jika Anda peduli kecepatan di sini ada beberapa di bawah ini.
Tiga metode berbeda semuanya dengan kecepatan yang bervariasi.
sumber
Saya mendapat pertanyaan serupa dalam tes.
Angka negatif ditambahkan untuk mempersulitnya sedikit lebih, maka Math.abs ().
sumber
Saya ingin memperbaiki jawaban @Neal yang cukup bagus untuk bilangan bulat, tetapi angka 1 akan mengembalikan panjang 0 pada kasus sebelumnya.
sumber
Coba ini:
Contohnya sedang digunakan
sumber
Ya, Anda perlu mengonversi ke string untuk menemukan panjangnya. Misalnya
sumber