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 (това така или иначе връща само цяло число).