MariaDB има ROUND()
функция и TRUNCATE()
функция, която може да връща едни и същи резултати или различни резултати, в зависимост от точната стойност на техните аргументи.
Както подсказват имената на функциите, ROUND()
кръгли номера и TRUNCATE()
съкращава броя. Отрязването на число просто го отрязва, без да се извършва закръгляване.
По-долу е даден кратък преглед на разликата между ROUND()
и TRUNCATE()
в MariaDB.
Разликата
Ето разликата между всяка функция накратко:
ROUND()
кръгли неговия аргумент до определен брой десетични знаци. Това понякога води до закръгляне на резултата, а понякога не.TRUNCATE()
просто съкращава неговия аргумент до определен брой десетични знаци. Не се получава закръгляване.
Синтаксис и дефиниции
Първо, ето синтаксиса и дефинициите на всяка функция.
ROUND()
ROUND()
функцията може да се използва по следните два начина:
ROUND(X)
ROUND(X,D)
ROUND()
закръгля аргумента X
до D
десетичните знаци. Алгоритъмът за закръгляване зависи от типа данни на X
.
TRUNCATE()
TRUNCATE()
функцията може да се използва само с един синтаксис:
TRUNCATE(X,D)
TRUNCATE()
връща числото X
, съкратено до D
десетични знаци.
Пример
Ето сравнение, за да демонстрирате разликата между ROUND()
и TRUNCATE()
:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Резултат:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
В този случай ROUND()
функцията закръгли числото нагоре, тъй като следващата цифра (8
) е по-голямо от 5
.
TRUNCATE()
функция от друга страна, просто отрязва числото на посочения десетичен знак. TRUNCATE()
не прави закръгляване. Просто прекъсва номера на определеното място.
И двете функции приемат отрицателна стойност за десетичната запетая и се прилага същата съответна логика:
SELECT
TRUNCATE(36789, -2),
ROUND(36789, -2);
Резултат:
+---------------------+------------------+ | TRUNCATE(36789, -2) | ROUND(36789, -2) | +---------------------+------------------+ | 36700 | 36800 | +---------------------+------------------+
Същият резултат
И двете функции понякога могат да върнат един и същ резултат. Всичко зависи от стойността на предаваните аргументи.
Ето пример, в който и двете връщат един и същ резултат:
SELECT
TRUNCATE(3.6749, 2),
ROUND(3.6749, 2);
Резултат:
+---------------------+------------------+ | TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) | +---------------------+------------------+ | 3.67 | 3.67 | +---------------------+------------------+
В този случай ROUND()
не закръгли числото нагоре, защото следващата цифра (4
) беше по-малко от 5
. Следователно и двата резултата са еднакви.
FLOOR()
Функция
И двете функции са различни от FLOOR()
функция, която връща най-голямата целочислена стойност, не по-голяма от нейния аргумент. FLOOR()
не приема втори аргумент като ROUND()
и TRUNCATE()
do (това така или иначе връща само цяло число).