Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Gunakan float atau desimal untuk jumlah dolar aplikasi akuntansi?

Haruskah tipe data Float atau Desimal digunakan untuk jumlah dolar?

Jawabannya mudah. Tidak pernah mengapung. TIDAK PERNAH !

Float menurut IEEE 754 selalu biner, hanya format desimal standar baru yang ditentukan IEEE 754R. Banyak bagian biner pecahan tidak pernah bisa sama dengan representasi desimal yang tepat.

Setiap bilangan biner dapat ditulis sebagai m/2^n (m , n bilangan bulat positif), sembarang angka desimal sebagai m/(2^n*5^n) .Karena binari tidak memiliki factor 5 utama , semua bilangan biner dapat diwakili dengan tepat oleh desimal, tetapi tidak sebaliknya.

0.3 = 3/(2^1 * 5^1) = 0.3

0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125]

          1/4         1/8         1/16          1/32

Jadi, Anda mendapatkan angka yang lebih tinggi atau lebih rendah dari angka desimal yang diberikan. Selalu.

Mengapa itu penting? Pembulatan.

Pembulatan normal berarti 0..4 ke bawah, 5..9 ke atas. Jadi ya tidak masalah jika hasilnya adalah 0.049999999999 .... atau 0.0500000000 ... Anda mungkin tahu bahwa itu berarti 5 sen, tetapi komputer tidak mengetahuinya dan membulatkan 0.4999 ... down (salah) dan 0.5000 ... atas (kanan).

Mengingat bahwa hasil perhitungan floating point selalu mengandung kesalahan kecil, keputusannya murni keberuntungan. Tidak ada harapan jika Anda ingin penanganan desimal bulat-genap dengan bilangan biner.

Tidak yakin? Anda bersikeras bahwa dalam sistem akun Anda semuanya baik-baik saja? Aset dan kewajiban sama? Oke, lalu ambil setiap angka berformat yang diberikan dari setiap entri, uraikan dan jumlahkan dengan sistem desimal independen!

Bandingkan dengan jumlah yang diformat. Ups, ada yang salah ya?

Untuk perhitungan itu, akurasi dan ketelitian yang ekstrim diperlukan (kami menggunakan Oracle'sFLOAT) sehingga kami dapat mencatat "sepersejuta sen" yang diperoleh.

Itu tidak membantu melawan kesalahan ini. Karena semua orang secara otomatis menganggap bahwa jumlah komputer benar, dan praktis tidak ada yang memeriksa secara mandiri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi objek SQL Server DateTime ke BIGINT (.Net ticks)

  2. Fitur Baru SQL Server 2019

  3. @@ROWCOUNT – Dapatkan Jumlah Baris yang Dipengaruhi oleh Pernyataan Terakhir di SQL Server

  4. SQL Server:PILIH hanya baris dengan MAX(DATE)

  5. UPDATE jika ada INSERT lain di SQL Server 2008