sql >> Database >  >> RDS >> Mysql

Verschil tussen zwevend en decimaal gegevenstype

Dit is wat ik vond toen ik deze twijfel had.

mysql> create table numbers (a decimal(10,2), b float);
mysql> insert into numbers values (100, 100);
mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G
*************************** 1. row ***************************
  @a := (a/3): 33.333333333
  @b := (b/3): 33.333333333333
@a + @a + @a: 99.999999999000000000000000000000
@b + @b + @b: 100

Het decimaalteken deed precies wat het moest doen in deze gevallen, het kapte de rest af, waardoor het 1/3 deel verloren ging.

Dus voor sommen is het decimaalteken beter, maar voor delen is de vlotter beter, tot op zekere hoogte natuurlijk. Ik bedoel, het gebruik van DECIMAL geeft je op geen enkele manier een "foutbestendige rekenkunde".

Ik hoop dat dit helpt.



  1. Fix Msg 8116 "Argumentgegevenstype varchar is ongeldig voor argument 1 van session_context-functie" in SQL Server

  2. Meerdere geparametriseerde variabelen toevoegen aan een database in c#

  3. Hoe ON CONFLICT werkt in SQLite

  4. UTF-16/Unicode-gegevens opslaan in SQL Server