Saya perlu menunjukkan nilai mata uang dalam format 1K yang sama dengan seribu, atau 1.1K, 1.2K, 1.9K dll, jika bukan ribuan bahkan, jika di bawah seribu, menampilkan normal 500, 100, 250 dll , menggunakan javascript untuk memformat angka?
javascript
jquery
formatting
numbers
Carl Weis
sumber
sumber
M
danG
?Jawaban:
Kedengarannya seperti ini cocok untuk Anda:
sumber
$mynumber_output
mana saya memasukkan ini untuk menggunakannya? Misalnya, katakan$mynumber_output
= 12846, saya ingin 12846 dikonversi menjadi12.8k
Versi yang lebih umum:
sumber
if (num >= si[i].value)
denganif (Math.abs(num) >= si[i].value)
.replace(rx, "$1")
harus dilakukan1.0
menjadi1
dan1.10
menjadi1.1
Inilah solusi sederhana yang menghindari semua
if
pernyataan (dengan kekuatanMath
).Bonus Meme
Apa artinya
SI
?sumber
Math.abs
untuk menambahkan dukungan untuk angka negatif, seperti itu:var tier = Math.log10(Math.abs(number)) / 3 | 0;
.Lebih lanjut meningkatkan Jawaban Salman karena mengembalikan nFormatter (33000) sebagai 33.0K
sekarang nFormatter (33000) = 33K
sumber
Thx @Cos untuk komentar, saya menghapus dependensi Math.round10.
sumber
Math.abs(num) >= decimal
.Banyak jawaban di utas ini menjadi agak rumit, menggunakan objek Matematika, objek peta, for-loop, regex, dll. Tetapi pendekatan ini tidak benar-benar meningkatkan keterbacaan kode, atau kinerja. Pendekatan lurus ke depan tampaknya menawarkan desain terbaik.
Memformat nilai tunai dengan K
Memformat nilai tunai dengan KMBT
Menggunakan angka negatif
sumber
'-' + formatCash(-1 * number)
Berikan Kredit pada Waylon Flinn jika Anda suka ini
Ini ditingkatkan dari pendekatannya yang lebih elegan untuk menangani angka negatif dan kasus ".0".
Semakin sedikit loop dan kasus "jika" yang Anda miliki, semakin baik IMO.
jsFiddle dengan test case -> https://jsfiddle.net/xyug4nvz/7/
sumber
abbreviateNumber(999999) == '1000k'
bukannya'1M'
. Ini karenatoFixed()
juga membulatkan angka. Tidak yakin bagaimana cara memperbaikinya, meskipun: /toFixed()
putaran nomor pula, Anda mungkin juga putaran nomor sebelum mengirimnya keabbreviateNumber()
, sehingga kembali1M
bukan1000k
. Bukan solusi, tetapi solusi.const floored = Math.floor(scaled * 10) / 10;
ES2020 menambahkan dukungan untuk ini dalam
Intl.NumberFormat
Menggunakan notasi sebagai berikut:NumberFormat
spesifikasi:Perhatikan bahwa saat ini tidak semua browser mendukung ES2020, jadi Anda mungkin memerlukan Polyfill ini: https://formatjs.io/docs/polyfills/intl-numberformat
sumber
notation
dancompactDisplay
tetapi FireFox 77 dan Safari 13.1 masih tidak mendukungnya sehingga Anda kemungkinan akan memerlukan polyfill.ini cukup elegan.
sumber
Anda dapat menggunakan paket format-d3 yang dimodelkan setelah Python Advanced String Formatting PEP3101 :
sumber
Lebih meningkatkan jawaban @ Yash dengan dukungan angka negatif:
sumber
Posting ini cukup lama tetapi saya entah bagaimana mencapai ke posting ini mencari sesuatu. SO untuk menambahkan input saya. Angka adalah solusi satu atap sekarang menjadi beberapa hari. Ini memberikan sejumlah besar metode untuk membantu memformat angka
http://numeraljs.com/
sumber
Metode pendek dan generik
Anda bisa membuat
COUNT_FORMATS
objek konfigurasi sepanjang atau sesingkat yang Anda inginkan., Tergantung pada rentang nilai yang Anda uji.sumber
Menambahkan pada jawaban teratas, ini akan memberikan 1k untuk 1000, bukan 1.0k
sumber
Versi modifikasi dari jawaban Waylon Flinn dengan dukungan untuk eksponen negatif:
Output yang diharapkan:
sumber
!Number.isFinite
' K M G T P E Z Y'
ke' K M'
jika Anda ingin unit maksM
Kode di bawah ini adalah 1K = 1024, jika Anda ingin 1K = 1000, ubah semua 1024 menjadi 1000.
sumber
Meningkatkan jawaban @ tfmontague lebih lanjut untuk memformat tempat desimal. 33,0k hingga 33k
sumber
Tidak puas dengan salah satu solusi yang diposting, jadi inilah versi saya:
Mendukung parameter presisi
sumber
Saya datang dengan kode yang sangat golf, dan itu sangat singkat!
sumber
Lebih lanjut meningkatkan Jawaban Salman karena kasus-kasus seperti nFormatter (999999,1) yang mengembalikan 1000K.
sumber
Cara termudah dan termudah untuk melakukan ini adalah
Ini berfungsi untuk nomor berapa pun. Termasuk
L
Cr
dllsumber
Dengan menghilangkan loop dalam solusi @ martin-sznapka, Anda akan mengurangi waktu eksekusi hingga 40%.
Tes kecepatan (200000 sampel acak) untuk solusi berbeda dari utas ini
sumber
sumber
Fungsi ini dapat mengubah angka besar (baik positif & negatif) menjadi format ramah pembaca tanpa kehilangan ketepatannya:
sumber
Saya menggunakan fungsi ini. Ini bekerja untuk keduanya
php
danjavascript
.sumber
Saya memutuskan untuk memperluas banyak jawaban @ Novellizator di sini untuk memenuhi kebutuhan saya. Saya ingin fungsi yang fleksibel untuk menangani sebagian besar kebutuhan format saya tanpa perpustakaan eksternal.
fitur
Contohnya
Fungsi
sumber
Wow, ada begitu banyak jawaban di sini. Saya pikir saya akan memberi Anda bagaimana saya menyelesaikannya karena tampaknya yang paling mudah dibaca, menangani angka negatif, dan jauh melampaui kisaran angka kilo untuk JavaScript. Ini juga akan mudah untuk mengubah apa yang Anda inginkan atau bahkan lebih jauh.
sumber
Alternatif yang lebih pendek:
sumber