mysql.h


TRUNCATE

TRUNCATE(X,D)

Devuelve el número X, truncado a D decimales. Si D es 0, el resultado no trendrá punto decimal o parte fracionaria:

mysql> SELECT TRUNCATE(1.223,1);
+-------------------+
| TRUNCATE(1.223,1) |
+-------------------+
|               1.2 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(1.999,1);
+-------------------+
| TRUNCATE(1.999,1) |
+-------------------+
|               1.9 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(1.999,0);
+-------------------+
| TRUNCATE(1.999,0) |
+-------------------+
|                 1 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(-1.999,1);
+--------------------+
| TRUNCATE(-1.999,1) |
+--------------------+
|               -1.9 |
+--------------------+
1 row in set (0.00 sec)

Desde MySQL 3.23.51, todos los números se redondean hacia cero. Si D es negativo, entonces la parte correspondiente del número es asignada a cero:

mysql> SELECT TRUNCATE(122,-2);
+------------------+
| TRUNCATE(122,-2) |
+------------------+
|              100 |
+------------------+
1 row in set (0.00 sec)

Como los números decimales normalmente no se almacenan como números exactos en los ordenadores, sino como valores de doble precisión, el siguente resultado puede parecer sorprendente:

mysql> SELECT TRUNCATE(10.28*100,0);
+-----------------------+
| TRUNCATE(10.28*100,0) |
+-----------------------+
|                  1027 |
+-----------------------+
1 row in set (0.00 sec)

Lo anterior sucede porque 10.28 se almacena como algo parecido a 10.2799999999999999.