Я пытаюсь определить лучший способ обрезать или отбрасывать лишние десятичные разряды в SQL без округления. Например:
declare @value decimal(18,2)
set @value = 123.456
Это автоматически круглый @value
быть 123.46
, это хорошо в большинстве случаев. Однако для этого проекта мне это не нужно. Есть ли простой способ обрезать десятичные дроби, которые мне не нужны? Я знаю, что могу использовать left()
функцию и преобразовать обратно в десятичную. Есть ли другие способы?
sql
sql-server
tsql
rounding
Райан Истабрук
источник
источник
Когда третий параметр ! = 0, он усекает, а не округляет
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Синтаксис
аргументы
numeric_expression
Является выражением категории точных числовых или приблизительных числовых типов данных, за исключением типа битовых данных.length
Точность, до которой округляется числовое выражение. длина должна быть выражением типа tinyint, smallint или int. Когда длина является положительным числом, numeric_expression округляется до числа десятичных разрядов, указанного в length. Когда длина является отрицательным числом, numeric_expression округляется с левой стороны десятичной точки, как указано в length.function
Тип операции для выполнения. функция должна быть tinyint, smallint или int. Когда функция опущена или имеет значение 0 (по умолчанию), числовое выражение округляется. Если указано значение, отличное от 0, выражение numeric_expression усекается.источник
источник
Вот способ, которым я смог усечь, а не округлять:
возвращает 100.0010
И твой пример:
возвращает 123.450
Теперь, если вы хотите избавиться от конечного нуля, просто приведите его:
возвращает 123.45
источник
На самом деле, каким бы ни был третий параметр, 0 или 1 или 2, он не будет округлять ваше значение.
источник
Round имеет необязательный параметр
источник
Вы хотите десятичную или нет?
Если нет, используйте
Если вы делаете это с 0, тогда сделайте раунд:
источник
Еще одно усечение без округления решения и примера.
источник
Floor()
которого и есть путь к десятичному числу без округления. Жаль, что у Floor () нет второго параметра, который бы указывал на какую позицию. Но я думаю, что * 10) / 10 действительно работает в этом направлении.Это удалит десятичную часть любого числа
источник
Даст вам 2 значения после запятой. (MS SQL SERVER)
источник
Другой способ это
ODBC TRUNCATE
функция:LiveDemo
Вывод:
Замечание:
Я рекомендую использовать встроенную
ROUND
функцию с третьим параметром, установленным в 1.источник
Я знаю, что уже довольно поздно, но я не вижу в этом ответа и уже давно использую этот трюк.
Просто вычтите .005 из вашего значения и используйте Round (@ num, 2).
Ваш пример:
возвращает 123.45
Он автоматически отрегулирует округление до нужного значения, которое вы ищете.
Кстати, вы воссоздаете программу из фильма Office Space?
источник
Пожалуйста, попробуйте использовать этот код для преобразования 3 десятичных значений после точки в 2 десятичных знака:
Выход 123.46
источник
Я думаю, что вы хотите только десятичное значение, в этом случае вы можете использовать следующее:
источник
Я знаю, что этот вопрос действительно старый, но никто не использовал подстроки для округления. Это как преимущество возможности округлять действительно длинные числа (предел вашей строки на сервере SQL, который обычно составляет 8000 символов):
источник
Я думаю, что мы можем пойти намного проще с более простым примером решения, найденным в Hackerrank:
Решение выше дает вам представление о том, как просто сделать значение ограниченным 4 десятичными знаками. Если вы хотите уменьшить или увеличить цифры после десятичной дроби, просто измените 4 на любое другое.
источник
Mod(x,1)
это самый простой способ, я думаю.источник
источник