Menangani Presisi Numerik JavaScript

Masih, berjuang dengan validasi numerik JS? Pergi dan baca seluruh artikel

Jika Anda tidak tahu, izinkan saya memberi tahu Anda bahwa di JS semua angka dikodekan sebagai angka floating-point presisi ganda. Singkatnya, ini mengikuti standar IEEE 754 (Internasional). Ini akan memformat angka dalam 64 bit. Dalam 64 itu, 51 pertama digunakan untuk menyimpan titik pecahan, 52 hingga 62 untuk eksponen dalam bit dan sisanya (63) untuk bit masuk.

Angka floating point direpresentasikan sebagai pecahan biner (basis 2). Sayangnya, banyak pecahan desimal tidak persis diwakili oleh fragmen spanduk. Angka nilai floating point yang Anda masukkan terbatas pada jumlah biner floating point point yang sebenarnya disimpan di mesin. Karena itu, Anda akan melihat bahwa aritmatika titik-mengambang TIDAK 100% akurat.

0.2 + 0.1
0.30000000000000004
0.3 - 0.1 0.19999999999999998
1111.11+1111.11+1111.11+1111.11+1111.11 5555.549999999999

99999999999.0123 + 0.00231432423
99999999999.01462

Math.pow(2, 53) - 1
9,007,199,254,740,991 //Max positive safe integer in JavaScript
Number(999999999999999); 999999999999999
Number(9999999999999999); 10000000000000000

Strategi untuk angka desimal

Ada dua hal yang harus ditangani di sini, representasi dan pengelolaan bilangan desimal. Untuk mencegah hilangnya kejelasan, nilai desimal harus dimasukkan dalam rangkaian sebagai satuan huruf dan bukan sebagai angka JSON. Namun, harus ada cara untuk mengetahui apakah nilai kabel JSON sesuai dengan angka desimal atau hanya string. Salah satu solusinya adalah membuat representasi khusus dari angka desimal, misalnya:

amount: { _type: "BigDecimal",
          _value_str: "1234.56"}

//Creating a Big object (Throws NaN on an invalid value)
var amount1 = new Big(“0.1”);             //
var amount2 = Big(“0.2”);                  // 'new' is optional
amount1.plus(amount2);                      // the result is a new Big object with value 0.3

Strategi untuk bilangan bulat

Seperti disebutkan sebelumnya, kisaran aman untuk nomor JSON adalah -253 <x <253. Oleh karena itu, mari kita menganalisis apa yang mungkin terlibat dalam rentang itu:

  • 253 milidetik telah menutupi kita selama hampir ± 300.000 tahun. Apakah Anda perlu mengelola tanggal di luar rentang ini?
  • Jika Anda pikir Anda mewakili id ​​tabel DB sebagai bilangan bulat. Apakah Anda akan meletakkan di atas meja lebih dari 9 kuadriliun baris?
  • Selain id tabel DB, jika Anda menggunakan angka untuk mewakili pesanan jenis, jumlah, jumlah hari, dll.

Oleh karena itu, sebagai solusi grosir, kami akan menolak harga di luar kisaran aman, meskipun sama-sama berpasangan. Untuk ini, Anda dapat menggunakan serializer / deserializer khusus untuk mencegah pengiriman / penerimaan nilai total di luar jarak yang aman.

Ringkasan

Sangat penting untuk segera mengatasi masalah akurasi numerik JavaScript. Sayangnya, sebelum Anda mulai menulis baris kode pertama untuk aplikasi Anda. Ketika Anda menyadari bahwa masalah ini telah mempengaruhi aplikasi Anda, mungkin sudah terlambat dan beberapa data telah rusak.

Lebih banyak konten di plainenglish.io

Suggested posts

Mencari Informasi Tentang Nama Domain

Kutipan dari Alat Perangkat Lunak Kecil dan Tajam oleh Brian P. Hogan

Mencari Informasi Tentang Nama Domain

Saat Anda membuat permintaan ke facebook.com, komputer Anda mencari nama domain untuk menerjemahkan nama domain tersebut menjadi alamat IP sehingga komputer Anda dapat membuat koneksi tersebut.

Kiat untuk Bertransisi Menjadi Cybersecurity Tanpa Latar Belakang Teknis.

Kiat untuk Bertransisi Menjadi Cybersecurity Tanpa Latar Belakang Teknis.

Pada tahun 2022, saya beralih dari peran nonteknis menjadi keamanan siber. Saya memiliki gelar pertama saya dalam Bahasa Jerman, saya tahu Anda terkejut dan ingin tahu tentang bagaimana saya berhasil melakukan transisi, Yah, itu terjadi begitu saja.

Related posts

Penganiayaan Umat Kristiani: Kejahatan Kebencian yang Tidak Kita Bicarakan

Lupakan Islamofobia: Kristen (dan Yahudi) adalah korban utama kejahatan kebencian agama.

Penganiayaan Umat Kristiani: Kejahatan Kebencian yang Tidak Kita Bicarakan

Pikiran rasional mana pun tahu bahwa lingkaran politik dan media didominasi oleh kiri, bahkan paling kiri, suatu keadaan yang menciptakan ketidakseimbangan dalam wacana politik. Di bidang agama, ketidakseimbangan ini terlihat jelas: surat kabar dan jaringan sayap kiri tidak terburu-buru membela iman Kristen.

Percakapan Berbahaya

Percakapan Berbahaya

Jika kita ingin terus berkembang di planet ini, kita harus melakukan percakapan yang berbahaya. Yang menantang apa yang telah kita lakukan, apa yang kita lakukan, dan apa yang saat ini akan terus kita lakukan (atau rencanakan untuk lakukan).

Arsip Ancaman Itu: Vol 7 Black Basta

Arsip Ancaman Itu: Vol 7 Black Basta

Di dunia yang saling terhubung saat ini, ancaman serangan dunia maya lebih umum dari sebelumnya. Penjahat dunia maya dan aktor negara terus-menerus berusaha mengeksploitasi kerentanan dan mencuri data berharga, yang menimbulkan risiko signifikan bagi organisasi dari semua ukuran.

HIDUP TANPA BATAS

Ketika Anda tumbuh dewasa, Anda cenderung diberi tahu bahwa dunia adalah apa adanya dan hidup Anda hanya untuk menjalani hidup Anda di dunia, tidak pernah mempertaruhkan hidup Anda, ikuti saja jalan yang ditetapkan dan pada akhirnya mati, dan cobalah untuk tidak melakukannya. hancurkan tembok terlalu banyak. Tapi itu kehidupan yang sangat terbatas.