Seperti yang kita ketahui, Javascript memiliki beberapa masalah (atau fitur) dengan penghitungan angka desimal. Misalnya:
console.log(0.1 + 0.2) // 0.30000000000000004
Dan kita tahu bahwa kita dapat menghindarinya menggunakan perpustakaan yang berbeda (misalnya saya menggunakan bignumber.js ), dan sekarang kita mendapatkan apa yang diharapkan:
console.log(Number(new BigNumber(0.1).plus(0.2))); // 0.3
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
TAPI
Bignumber.js memiliki keterbatasan:
Ia menerima nilai tipe nomor (hanya hingga 15 digit signifikan), string, atau objek BigNumber.
Kita dapat meneruskan sebuah string (mungkin saja), tetapi dengan cara ini kita dapat kehilangan beberapa digit dari akhir:
console.log(Number(new BigNumber(0.1).plus("198.43092534959501"))); // 198.530925349595, not 198.53092534959501
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
Sekarang saya bekerja dengan cryptocurrency dan sering kali saya berurusan dengan angka seperti 198.43092534959501
, dan dalam hal ini saya mendapatkan kesalahan (seperti yang diharapkan):
console.log(Number(new BigNumber(0.1).plus(198.43092534959501))); // error
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
Saya tahu bahwa beberapa orang menggunakan pengganda tambahan, tetapi ini tidak akan berfungsi dalam kasus yang disebutkan di atas. Jika Anda berurusan dengan mata uang kripto, Anda tahu, bahwa kami sebenarnya bekerja dengan nilai yang tidak dikalikan dan dikalikan (seperti 489964999999000000
dan 0.489964999999
). Namun tujuan saya saat ini adalah menjumlahkan semua saldo fiat untuk mata uang yang berbeda, namun memiliki pengganda yang berbeda, jadi saya tidak bisa hanya menjumlahkan nilai yang tidak dikalikan, dan sepertinya saya perlu menjumlahkan nilai yang dikalikan.
Latar belakangnya kecil, namun pertanyaan umum saya adalah:
Cara menjumlahkan/mengalikan/dll. bilangan desimal yang lebih dari 15 digit?
0.1
bukan angka desimal tetapi tipe data floating point. Dan tipe data floating point tersebut tidak cocok untuk perhitungan desimal karena memiliki tujuan yang berbeda. Dan itu tidak hanya berlaku untuk JS tetapi untuk bahasa lainnya. - person t.niese   schedule 03.04.2018