Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Ketika saya menambahkan xx ke kolom float mysql, hasilnya salah, Apakah ini bug?

Masalah Anda ada hubungannya dengan seberapa besar nilai floating point Anda, tetapi saya tidak 100% yakin mengapa. Saya menguji memperbarui baris yang sama dengan angka yang lebih kecil dan berfungsi dengan baik. Anda juga harus menahan diri untuk tidak menggunakan tanda kutip sedapat mungkin karena memerlukan pemrosesan ekstra. Lihat pertanyaan SO ini:perbarui kolom dengan mengurangi a nilai

Inilah solusi mudah saya seperti yang disarankan Tim Biegeleisen:

CREATE TABLE `xxx` (
  `uid` int(11) NOT NULL,
  `money` decimal(10,2) NOT NULL DEFAULT '0.00' ,
  `real_money` float(10,2) NOT NULL ,
  `available_invoice` float(10,2) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

Sisipkan:

USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);

Perbarui tanpa string:

update xxx set money = money - 20 where uid = 1234;

Ada beberapa hal yang aneh saat menghitung dengan nilai floating point yang besar. Beberapa masalah ini bergantung pada mesin dan terkait dengan jenis prosesor yang Anda miliki. Baca selengkapnya di sini:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Juga, menurut pertanyaan SO lainnya nilai floating point BUKAN cara yang baik untuk menyimpan nilai uang. Perbedaan antara tipe data float dan desimal (lihat jawaban kedua).

Tampaknya menggunakan decimal dan numeric tipe data yang terbaik untuk kolom uang di mysql.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghubungkan dari jarak jauh ke database MySQL

  2. Referensi tidak didukung pada fungsi grup

  3. MySQL Temukan perbedaan tingkat stok antara dua tabel dan kembalikan hasilnya

  4. PILIH dengan variabel kueri tidak menggunakan INDEXes

  5. MySQL:UPDATE tabel dengan COUNT dari tabel lain?