>>> spark.sql("SELECT floor(-0.1), typeof(floor(-0.1)), typeof(-0.1)").show()
+-----------+-------------------+------------+
|FLOOR(-0.1)|typeof(FLOOR(-0.1))|typeof(-0.1)|
+-----------+-------------------+------------+
|         -1|       decimal(1,0)|decimal(1,1)|
+-----------+-------------------+------------+

>>> spark.sql("SELECT floor(5), typeof(floor(5)), typeof(5)").show()
+--------+----------------+---------+
|FLOOR(5)|typeof(FLOOR(5))|typeof(5)|
+--------+----------------+---------+
|       5|          bigint|      int|
+--------+----------------+---------+

>>> spark.sql("SELECT floor(5.4), typeof(floor(5.4)), typeof(5.4)").show()
+----------+------------------+------------+
|FLOOR(5.4)|typeof(FLOOR(5.4))| typeof(5.4)|
+----------+------------------+------------+
|         5|      decimal(2,0)|decimal(2,1)|
+----------+------------------+------------+

>>> spark.sql("SELECT floor(3.1411, -3), typeof(floor(3.1411, -3)), typeof(3.1411)").show()
+-----------------+-------------------------+--------------+
|floor(3.1411, -3)|typeof(floor(3.1411, -3))|typeof(3.1411)|
+-----------------+-------------------------+--------------+
|                0|             decimal(4,0)|  decimal(5,4)|
+-----------------+-------------------------+--------------+

>>> spark.sql("SELECT floor(3.1411, 3), typeof(floor(3.1411, 3)), typeof(3.1411)").show()
+----------------+------------------------+--------------+
|floor(3.1411, 3)|typeof(floor(3.1411, 3))|typeof(3.1411)|
+----------------+------------------------+--------------+
|           3.141|            decimal(5,3)|  decimal(5,4)|
+----------------+------------------------+--------------+

>>> spark.sql("SELECT floor(3345.1, -2), typeof(floor(3345.1, -2)), typeof(3345.1)").show()
+-----------------+-------------------------+--------------+
|floor(3345.1, -2)|typeof(floor(3345.1, -2))|typeof(3345.1)|
+-----------------+-------------------------+--------------+
|             3300|             decimal(5,0)|  decimal(5,1)|
+-----------------+-------------------------+--------------+

>>> spark.sql("SELECT floor(-12.345, 1), typeof(floor(-12.345, 1)), typeof(3345.1)").show()
+-----------------+-------------------------+--------------+
|floor(-12.345, 1)|typeof(floor(-12.345, 1))|typeof(3345.1)|
+-----------------+-------------------------+--------------+
|            -12.4|             decimal(4,1)|  decimal(5,1)|
+-----------------+-------------------------+--------------+

>>> spark.sql("SELECT floor(CAST(5 as TINYINT), 1), typeof(floor(CAST(5 as TINYINT), 1))").show()
+----------------------------+------------------------------------+
|floor(CAST(5 AS TINYINT), 1)|typeof(floor(CAST(5 AS TINYINT), 1))|
+----------------------------+------------------------------------+
|                           5|                        decimal(4,0)|
+----------------------------+------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as TINYINT), -4), typeof(floor(CAST(5 as TINYINT), -4))").show()
+-----------------------------+-------------------------------------+
|floor(CAST(5 AS TINYINT), -4)|typeof(floor(CAST(5 AS TINYINT), -4))|
+-----------------------------+-------------------------------------+
|                            0|                         decimal(5,0)|
+-----------------------------+-------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as SMALLINT), 1), typeof(floor(CAST(5 as SMALLINT), 1))").show()
+-----------------------------+-------------------------------------+
|floor(CAST(5 AS SMALLINT), 1)|typeof(floor(CAST(5 AS SMALLINT), 1))|
+-----------------------------+-------------------------------------+
|                            5|                         decimal(6,0)|
+-----------------------------+-------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as SMALLINT), -6), typeof(floor(CAST(5 as SMALLINT), -6))").show()
+------------------------------+--------------------------------------+
|floor(CAST(5 AS SMALLINT), -6)|typeof(floor(CAST(5 AS SMALLINT), -6))|
+------------------------------+--------------------------------------+
|                             0|                          decimal(7,0)|
+------------------------------+--------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as INT), 1), typeof(floor(CAST(5 as INT), 1))").show()
+------------------------+--------------------------------+
|floor(CAST(5 AS INT), 1)|typeof(floor(CAST(5 AS INT), 1))|
+------------------------+--------------------------------+
|                       5|                   decimal(11,0)|
+------------------------+--------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as INT), -11), typeof(floor(CAST(5 as INT), -11))").show()
+--------------------------+----------------------------------+
|floor(CAST(5 AS INT), -11)|typeof(floor(CAST(5 AS INT), -11))|
+--------------------------+----------------------------------+
|                         0|                     decimal(12,0)|
+--------------------------+----------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as BIGINT), 1), typeof(floor(CAST(5 as BIGINT), 1))").show()
+---------------------------+-----------------------------------+
|floor(CAST(5 AS BIGINT), 1)|typeof(floor(CAST(5 AS BIGINT), 1))|
+---------------------------+-----------------------------------+
|                          5|                      decimal(21,0)|
+---------------------------+-----------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as BIGINT), -21), typeof(floor(CAST(5 as BIGINT), -21))").show()
+-----------------------------+-------------------------------------+
|floor(CAST(5 AS BIGINT), -21)|typeof(floor(CAST(5 AS BIGINT), -21))|
+-----------------------------+-------------------------------------+
|                            0|                        decimal(22,0)|
+-----------------------------+-------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as FLOAT), 1), typeof(floor(CAST(5 as FLOAT), 1))").show()
+--------------------------+----------------------------------+
|floor(CAST(5 AS FLOAT), 1)|typeof(floor(CAST(5 AS FLOAT), 1))|
+--------------------------+----------------------------------+
|                       5.0|                      decimal(9,1)|
+--------------------------+----------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as FLOAT), -15), typeof(floor(CAST(5 as FLOAT), -15))").show()
+----------------------------+------------------------------------+
|floor(CAST(5 AS FLOAT), -15)|typeof(floor(CAST(5 AS FLOAT), -15))|
+----------------------------+------------------------------------+
|                           0|                       decimal(16,0)|
+----------------------------+------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as DOUBLE), 1), typeof(floor(CAST(5 as DOUBLE), 1))").show()
+---------------------------+-----------------------------------+
|floor(CAST(5 AS DOUBLE), 1)|typeof(floor(CAST(5 AS DOUBLE), 1))|
+---------------------------+-----------------------------------+
|                        5.0|                      decimal(17,1)|
+---------------------------+-----------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as DOUBLE), -31), typeof(floor(CAST(5 as DOUBLE), -31))").show()
+-----------------------------+-------------------------------------+
|floor(CAST(5 AS DOUBLE), -31)|typeof(floor(CAST(5 AS DOUBLE), -31))|
+-----------------------------+-------------------------------------+
|                            0|                        decimal(32,0)|
+-----------------------------+-------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as DECIMAL(5, 2)), 1), typeof(floor(CAST(5 as DECIMAL(5, 2)), 1))").show()
+---------------------------------+-----------------------------------------+
|floor(CAST(5 AS DECIMAL(5,2)), 1)|typeof(floor(CAST(5 AS DECIMAL(5,2)), 1))|
+---------------------------------+-----------------------------------------+
|                              5.0|                             decimal(5,1)|
+---------------------------------+-----------------------------------------+

>>> spark.sql("SELECT floor(CAST(5 as DECIMAL(5, 2))), typeof(floor(CAST(5 as DECIMAL(5, 2))))").show()
+------------------------------+--------------------------------------+
|FLOOR(CAST(5 AS DECIMAL(5,2)))|typeof(FLOOR(CAST(5 AS DECIMAL(5,2))))|
+------------------------------+--------------------------------------+
|                             5|                          decimal(4,0)|
+------------------------------+--------------------------------------+

>>> spark.sql("SELECT floor(5.4, -1), typeof(floor(5.4, -1)), typeof(5.4)").show()
+--------------+----------------------+------------+
|floor(5.4, -1)|typeof(floor(5.4, -1))| typeof(5.4)|
+--------------+----------------------+------------+
|             0|          decimal(2,0)|decimal(2,1)|
+--------------+----------------------+------------+

>>> spark.sql("SELECT floor(5, -1), typeof(floor(5, -1)), typeof(5)").show()
+------------+--------------------+---------+
|floor(5, -1)|typeof(floor(5, -1))|typeof(5)|
+------------+--------------------+---------+
|           0|       decimal(11,0)|      int|
+------------+--------------------+---------+

>>> spark.sql("SELECT floor(5, 0), typeof(floor(5, 0)), typeof(5)").show()
+-----------+-------------------+---------+
|floor(5, 0)|typeof(floor(5, 0))|typeof(5)|
+-----------+-------------------+---------+
|          5|      decimal(11,0)|      int|
+-----------+-------------------+---------+
