Angka Formatter
Format angka dengan koma, singkatan, simbol mata uang, dan desimal kustom.
Cara kerjanya
- Masukkan angka Anda: ketik atau tempel nilai numerik, bilangan bulat, desimal, angka besar, atau notasi ilmiah.
- Pilih opsi format: pilih lokal Anda (US, EU, dll.), jumlah desimal, pemisah pengelompokan, dan simbol mata uang jika perlu.
- Salin hasil yang diformat: angka ditampilkan dalam format yang dipilih secara seketika. Salin untuk digunakan dalam laporan, dokumen, atau ekspor.
Mengapa menggunakan formatter angka?
Angka berarti hal yang berbeda di lokal yang berbeda. AS menulis seribu sebagai 1,000.00 sedangkan banyak negara Eropa menulisnya 1.000,00. Menyalin angka mentah antar sistem menyebabkan kesalahan parsing, salah baca, dan kesalahan finansial. Formatter angka memastikan angka Anda ditampilkan dengan benar untuk audiens mana pun, menyiapkan laporan keuangan, melokalisasi konten, atau membersihkan data untuk presentasi.
Fitur
- Pemformatan sesuai lokal: mendukung format US, EU, dan internasional dengan pemisah desimal dan pengelompokan yang benar.
- Kontrol presisi desimal: tetapkan persis berapa banyak desimal yang akan ditampilkan.
- Pengelompokan ribuan: tambah atau hapus pemisah ribuan dengan satu klik.
- Pemformatan mata uang: tambahkan simbol mata uang sebagai awalan dan format sebagai nilai mata uang.
- Notasi ilmiah: konversi dari atau ke notasi ilmiah untuk angka yang sangat besar atau sangat kecil.
Pertanyaan umum
Apa perbedaan antara format angka US dan Eropa?
Di Amerika Serikat, pemisah desimal adalah titik (.) dan pemisah ribuan adalah koma (,), mis. 1,234.56. Di sebagian besar Eropa, terbalik: 1.234,56. Alat ini mengonversi dengan benar antara kedua format.
Bisakah saya memformat angka untuk mata uang?
Ya. Aktifkan mode mata uang dan pilih simbol ($ € £ ¥, dll.) untuk diawali ke angka yang diformat. Untuk format akuntansi dengan konvensi angka negatif, aktifkan mode akuntansi.
Apakah menangani angka yang sangat besar atau sangat kecil?
Ya. Formatter menangani angka multidigit dan dapat menampilkannya dalam notasi standar, dikelompokkan, atau ilmiah. Presisi floating-point diterapkan pada desimal yang dikonfigurasi.
Dari mana standar pemformatan angka berasal
Format angka yang Anda lihat di perangkat lunak saat ini didefinisikan oleh tumpukan kecil standar yang membutuhkan tiga puluh tahun untuk mengendap. IEEE 754 (1985), direvisi pada 2008 dan 2019, menetapkan tata letak bit angka floating-point biner: 64 bit dibagi menjadi 1 tanda, 11 eksponen, 52 mantissa, yang merupakan apa yang setiap angka JavaScript di bawah kap. ISO 4217 (1978, edisi saat ini 2015) mendefinisikan kode mata uang tiga huruf, USD, EUR, JPY, INR, BRL, dan berapa banyak unit kecil yang dimiliki masing-masing (2 untuk USD, 0 untuk JPY, 3 untuk KWD, 4 untuk CLF). Unicode CLDR (Common Locale Data Repository), pertama kali dirilis pada 2003, adalah dataset terbuka yang mencatat pemisah grup, pemisah desimal, simbol mata uang, dan aturan jamak untuk setiap locale; rilis saat ini adalah CLDR 46 (Oktober 2024). ECMA-402 (2012), API Internasionalisasi ECMAScript, memberi JavaScript ikatan asli ke data itu via Intl.NumberFormat, yang didukung oleh ICU (International Components for Unicode) di V8, JavaScriptCore, dan SpiderMonkey. Bersama-sama keempat spec itu membuat (1234567).toLocaleString('de-DE') mengembalikan 1.234.567 alih-alih 1,234,567.
Enam pola locale yang akan Anda temui
Sebagian besar format angka di alam liar jatuh ke dalam enam pola. Menghafal enam ini mencakup ~95% basis pengguna produk global mana pun.
- en-US, en-GB, ja-JP, zh-CN, ko-KR, grup koma, desimal titik:
1,234,567.89. - de-DE, es-ES, it-IT, nl-NL, pt-BR, grup titik, desimal koma:
1.234.567,89. Hati-hati menempelkan ini ke spreadsheet AS. - fr-FR, ru-RU, sv-SE, pl-PL, grup spasi tanpa-jeda sempit (Unicode U+202F), desimal koma:
1 234 567,89. Pemisahnya bukan spasi biasa; menyalin-tempel melalui sistem yang menormalkan whitespace akan merusaknya. - de-CH, grup tanda kutip tunggal kanan (U+2019), desimal titik:
1’234’567.89. Swiss unik di sini. - en-IN, hi-IN, grup koma, desimal titik, tetapi pengelompokan adalah 2-2-3 bukan 3-3-3:
12,34,567.89. Ini mencerminkan sistem lakh/crore: 1 lakh = 10⁵, 1 crore = 10⁷. - ar-EG, ar-SA, angka Arab-India (٠١٢٣٤٥٦٧٨٩), desimal Arab U+066B, pemisah ribuan Arab U+066C:
١٬٢٣٤٬٥٦٧٫٨٩. Sebagian besar lingkungan pengembang berbahasa Arab menggunakan angka Latin secara internal dan hanya beralih untuk tampilan.
Mode pembulatan, apa yang sebenarnya mereka lakukan
ECMA-402 (2023) menambahkan sembilan mode pembulatan ke Intl.NumberFormat. Pilihan mengubah total keuangan, laporan ilmiah, dan perhitungan pajak. Tiga yang paling penting dalam praktik.
halfExpand(default). 2,5 dibulatkan ke 3, −2,5 dibulatkan ke −3. Ini adalah pembulatan yang semua orang pelajari di sekolah dan default JavaScript.halfEven(pembulatan banker). 2,5 dibulatkan ke 2, 3,5 dibulatkan ke 4, seri selalu pergi ke digit genap. Diperlukan oleh IEEE 754 untuk aritmatika floating-point. Digunakan dalam tabel pajak AS, komputasi ilmiah, dan sistem akuntansi besar untuk menghilangkan bias sistematis kecil yanghalfExpandperkenalkan selama jutaan pembulatan.trunc. Membuang segalanya setelah pemotongan tanpa pembulatan. 2,9 ke 2, −2,9 ke −2. Digunakan ketika Anda benar-benar ingin membuang presisi, tidak pernah untuk uang.- Enam lainnya (
ceil,floor,expand,halfCeil,halfFloor,halfTrunc) menangani kasus khusus seperti selalu membulatkan ke atas untuk biaya pengiriman atau selalu membulatkan ke bawah untuk diskon pajak. Pilih dengan sengaja, jangan terima default jika uang atau kepatuhan terlibat.
Di mana alat ini mendapatkan tempatnya
- Laporan keuangan. Format pendapatan, biaya, rasio untuk presentasi. Beralih antara format AS dan UE agar sesuai dengan negara audiens.
- Pemeriksaan locale toko Anda. Ketik harga dalam format yang diinginkan dan verifikasi cocok dengan apa yang situs e-commerce Anda render untuk pelanggan di Jerman atau India.
- Persiapan CSV. Konversi baris Jerman
1.234,56ke AS1234.56sebelum mengimpor ke sheet yang mengharapkan desimal titik, atau sebaliknya. - Pemformatan rupee India. Ubah 12.500.000 menjadi 1,25,00,000 (1,25 crore) untuk audiens Asia Selatan. Sebagian besar alat buatan AS tidak melakukan ini.
- Tampilan ringkas dashboard. Ubah 1.234.567 menjadi
1.23Muntuk widget di mana ruang horizontal sempit. Notasi ringkas juga locale-aware: Jerman menampilkan1,23 Mio. - Penambahan simbol mata uang. Tambahkan $, €, £, ¥, ₹ di posisi yang benar untuk setiap locale, dolar AS di depan, euro Jerman di belakang.
- Pelarian notasi ilmiah Excel. ID besar yang ditempelkan seperti snowflake Twitter dikonversi ke
1.23E+18dan kehilangan presisi. Format mereka dengan pengelompokan plus apostrof awal sebelum menempelkan agar Excel memperlakukannya sebagai teks.
Kesalahan yang menggigit bahkan pengembang berpengalaman
- Aritmatika floating-point pada uang.
0.1 + 0.2 === 0.30000000000000004di setiap bahasa IEEE 754, bukan hanya JavaScript. Simpan mata uang sebagai unit kecil integer (sen) atau gunakan pustaka desimal sepertidecimal.js. Pemformatan menyembunyikan kesalahan, tidak memperbaikinya. - Parsing naif string locale.
parseFloat("1,234.56")mengembalikan1, bukan1234.56.parseFloat("1.234,56")mengembalikan1.234. Untuk parsing angka berformat locale, hapus pemisah grup lalu ganti tanda desimal, idealnya dikendalikan olehIntl.NumberFormat(locale).formatToParts(). - Kehilangan presisi pada integer besar. Integer di atas
2⁵³ − 1 = 9 007 199 254 740 991diam-diam kehilangan presisi saat disimpan sebagainumber. ID Twitter, ID Stripe, hash transaksi blockchain semua melebihi ini. Terima mereka sebagai string atau gunakanBigInt;Intl.NumberFormatmenerima BigInt secara native. - Unit kecil gaya Stripe. Stripe mengirim
amount: 499untuk $4.99. Bagi dengan 100 (atau dengan jumlah unit kecil ISO 4217 untuk mata uang) sebelum memformat. JPY, KRW, VND, ISK, HUF menggunakan 0 unit kecil, tidak perlu pembagian. - Input persen adalah pecahan.
new Intl.NumberFormat('en', {style: 'percent'}).format(0.5)mengembalikan50%, bukan0.5%. Kalikan nilai yang disimpan dengan 0,01 sebelum memformat jika Anda menyimpannya sebagai persentase. - Membangun NumberFormat dalam loop panas. Setiap panggilan konstruktor memuat data locale ICU. Gunakan kembali satu instance di seluruh panggilan: 1 juta format dengan instance cache butuh ~60 ms di V8, ~3 detik jika Anda membangun ulang setiap kali.
- JPY dengan dua tempat desimal.
¥1000.00terlihat salah karena JPY memiliki 0 unit kecil. AturminimumFractionDigits: 0, maximumFractionDigits: 0untuk JPY, KRW, VND, ISK, HUF, CLP.
Pertanyaan yang lebih sering diajukan
Mengapa 0,1 + 0,2 tidak sama dengan 0,3?
Karena float biner IEEE 754 tidak dapat menyimpan pecahan desimal 0,1 dengan tepat, dengan cara yang sama bahwa basis 10 tidak dapat menyimpan 1/3 dengan tepat. Double 64-bit terdekat dengan 0,1 adalah sekitar 0,1000000000000000055511151231257827021181583404541015625. Menambahkan dua perkiraan seperti itu menghasilkan hasil yang membulat ke 0,30000000000000004 bukannya 0,3. Setiap bahasa IEEE 754 memiliki perilaku ini: Java, Python, C++, Swift, semuanya. Untuk aritmatika desimal yang tepat, gunakan sen integer atau pustaka seperti decimal.js / Decimal Python / BigDecimal Java.
Apa perbedaan antara Intl.NumberFormat dan toLocaleString?
Mesin yang sama, ergonomi yang berbeda. (1234.5).toLocaleString('de-DE', {style: 'currency', currency: 'EUR'}) dan new Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(1234.5) menghasilkan output identik. Perbedaannya: Intl.NumberFormat dapat digunakan kembali, jadi jika Anda memformat banyak angka dengan opsi yang sama, instansiasikan sekali dan cache. toLocaleString membaca opsi konstruktor setiap panggilan dan secara dramatis lebih lambat dalam loop ketat.
Bagaimana sistem penomoran India bekerja?
Inggris India dan Hindi mengelompokkan digit dalam pola 2-2-3 bukannya 3-3-3: tiga digit paling kanan, lalu kelompok dua. 100.000 ditulis 1,00,000 dan disebut satu lakh (10⁵). 10.000.000 ditulis 1,00,00,000 dan disebut satu crore (10⁷). Intl.NumberFormat('en-IN').format(12345678) mengembalikan 1,23,45,678. Sistem meluas ke arab (10⁹) dan kharab (10¹¹) meskipun jarang dalam penggunaan modern.
Seberapa besar angka yang dapat ditangani alat ini?
Hingga Number.MAX_SAFE_INTEGER = 2⁵³ − 1 = 9.007.199.254.740.991, integer apa pun bertahan dari perjalanan bolak-balik dengan tepat. Di luar itu, presisi mulai bocor. JSON.parse("9007199254740993") mengembalikan 9007199254740992, double terdekat yang dapat direpresentasikan. Untuk nilai yang lebih besar, tempelkan sebagai literal BigInt (dengan n di akhir) atau perlakukan sebagai string. Pemformat menerima keduanya.
Apakah angka saya dikirim ke mana-mana?
Tidak. Intl.NumberFormat dan data locale dikirimkan bersama browser Anda; seluruh pipeline berjalan secara lokal. Buka tab Network di DevTools dan format angka, Anda akan melihat nol permintaan keluar. Aman untuk gaji, pendapatan, saldo akun, atau data apa pun yang tidak akan Anda tempelkan ke layanan yang dihosting.