Estou tentando determinar a melhor maneira de truncar ou soltar casas decimais extras no SQL sem arredondamento. Por exemplo:
declare @value decimal(18,2)
set @value = 123.456
Este será automaticamente rodada @value
para ser 123.46
, o que é bom na maioria dos casos. No entanto, para este projeto, não preciso disso. Existe uma maneira simples de truncar os decimais de que não preciso? Eu sei que posso usar a left()
função e converter de volta para um decimal. Existem outras maneiras?
sql
sql-server
tsql
rounding
Ryan Eastabrook
fonte
fonte
Quando o terceiro parâmetro ! = 0 , trunca em vez de arredondar
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Sintaxe
Argumentos
numeric_expression
É uma expressão da categoria de tipo de dados numérico exato ou aproximado, exceto para o tipo de dados de bit.length
É a precisão na qual a expressão numérica deve ser arredondada. length deve ser uma expressão do tipo tinyint, smallint ou int. Quando comprimento é um número positivo, a expressão numérica é arredondada para o número de casas decimais especificadas pelo comprimento. Quando o comprimento é um número negativo, a expressão numérica é arredondada no lado esquerdo do ponto decimal, conforme especificado pelo comprimento.function
É o tipo de operação a ser executada. A função deve ser tinyint, smallint ou int. Quando a função é omitida ou tem um valor 0 (padrão), a expressão numérica é arredondada. Quando um valor diferente de 0 é especificado, a expressão numérica é truncada.fonte
fonte
Aqui está a maneira que eu consegui truncar e não arredondar:
retorna 100.0010
E seu exemplo:
retorna 123.450
Agora, se você quiser se livrar do zero final, basta convertê-lo:
retorna 123,45
fonte
Na verdade, qualquer que seja o terceiro parâmetro, 0 ou 1 ou 2, ele não arredondará seu valor.
fonte
Round tem um parâmetro opcional
fonte
Você quer o decimal ou não?
Caso contrário, use
Se você fizer isso com 0, faça uma rodada:
fonte
Outro truncado, sem solução de arredondamento e exemplo.
fonte
Floor()
é o caminho para eliminar decimais sem arredondar de fato. Pena que Floor () não possui um segundo parâmetro para indicar em qual posição. Mas acho que o * 10) / 10 funciona muito bem com isso.Isso removerá a parte decimal de qualquer número
fonte
Daria a você 2 valores após o ponto decimal. (SERVIDOR MS SQL)
fonte
Outra maneira é a
ODBC TRUNCATE
função:LiveDemo
Resultado:
Observação:
Eu recomendo usar a
ROUND
função interna com o terceiro parâmetro definido como 1.fonte
Sei que é tarde demais, mas não a vejo como resposta e tenho usado esse truque há anos.
Basta subtrair 0,005 do seu valor e usar Arredondar (@ num, 2).
Seu exemplo:
retorna 123,45
Ele ajustará automaticamente o arredondamento para o valor correto que você está procurando.
A propósito, você está recriando o programa do filme Office Space?
fonte
Tente usar este código para converter 3 valores decimais após um ponto em 2 casas decimais:
A saída é 123.46
fonte
Eu acho que você quer apenas o valor decimal, neste caso, você pode usar o seguinte:
fonte
Eu sei que esta pergunta é realmente antiga, mas ninguém usou sub-strings para arredondar. Isso tem como vantagem a capacidade de arredondar números realmente longos (limite da sua string no SQL Server, que geralmente tem 8000 caracteres):
fonte
Acho que podemos ir muito mais fácil com a solução de exemplo mais simples encontrada no Hackerrank:
A Solução acima dá uma ideia de como simplesmente tornar o valor limitado a 4 casas decimais. Se você deseja diminuir ou aumentar os números após o decimal, basta alterar 4 para o que quiser.
fonte
Mod(x,1)
é a maneira mais fácil que eu penso.fonte
fonte