Respostas:
tente isso
SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Use a Str()
função. São necessários três argumentos (o número, o número total de caracteres a serem exibidos e o número de casas decimais a serem exibidas
Select Str(12345.6789, 12, 3)
exibe: '12345.679' (3 espaços, 5 dígitos 12345, um ponto decimal e três dígitos decimais (679). - arredonda se for necessário truncar (a menos que a parte inteira seja muito grande para o tamanho total, nesse caso, são exibidos asteriscos.)
para um total de 12 caracteres, com 3 à direita do ponto decimal.
it rounds if it has to truncate
... a menos que a parte inteira seja muito grande para o tamanho total, nesse caso, asteriscos serão exibidos. Isso é mencionado na documentação paraSTR
. Aqui está uma citação dessa página:STR(1223,2) truncates the result set to **.
Geralmente, você pode definir a precisão de um número no SQL, definindo-o com parâmetros. Na maioria dos casos, isso será NUMERIC(10,2)
ou Decimal(10,2)
- definirá uma coluna como um Número com 10 dígitos no total com uma precisão de 2 (casas decimais).
Editado para maior clareza
Este trabalho para mim e sempre mantém frações de dois dígitos
23,1 ==> 23,10
25,569 ==> 25,56
1 ==> 1,00
Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2
É assim que as crianças estão fazendo isso hoje:
DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')
123,46
DECLARE @test DECIMAL(18,6) = 0.456789
então SELECT FORMAT(@test, '##.##')
retorna: .46
Como você consegue mostrar o zero inicial 0.46
:?
Tente o seguinte:
declare @MyFloatVal float;
set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))
select @MyFloatVal
Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
Multiplique o valor que você deseja inserir (por exemplo, 2,99) por 100
Em seguida, insira a divisão por 100 do resultado, adicionando 0,01 ao final:
299.01/100
Isso permitirá um total de 10 dígitos com 2 valores após o decimal. Isso significa que ele pode acomodar o valor antes de decimal até 8 dígitos e 2 após decimal.
Para validar, coloque o valor na seguinte consulta.
DECLARE vtest number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;