Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Fernandes dos Santos

Arredondar Centavos

Recommended Posts

Pessoal, boa tarde.

 

Preciso fazer uma função que converta os valores da seguinte forma:

 

tenho que trabalhar com os centavos.(casas decimais)

 

 

Até 0,50 centavos

10,15 ou menor os centavos deve ficar --> 10,00

10,16 ou maior os centavos deve ficar --> 10,50

 

De 0,50 até 1,00

10,65 ou menos os centavos deve ficar --> 10,50

10,66 ou maior os centavos deve ficar --> 11,00

 

Estou postando aqui pois não sei nem por onde começar, não sei como posso fazer para pegar o valor somente dos centavos.

 

Alguêm tem alguma ideia de como posso começar a desenvolver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua regra esta um pouco confusa, mas acho que um CASE pode lhe ajudar:

 

Declare @Valor FloatSet     @Valor = 10.15 Select Round(@Valor,2) As '2Casas', Round(@Valor,1) As '1 Casa' , Ceiling(@Valor) As 'Arrendondando para Cima', floor (@Valor) As 'Arrendondando para Baixo' , (SUBSTRING((CAST(@Valor AS varchar)), (CHARINDEX('.',cast(@Valor as varchar))+1),3)), CASE WHEN (SUBSTRING((CAST(@Valor AS varchar)), (CHARINDEX('.',cast(@Valor as varchar))+1),3)) <= 15THEN floor (@Valor)WHEN (SUBSTRING((CAST(@Valor AS varchar)), (CHARINDEX('.',cast(@Valor as varchar))+1),3)) >= 16then @ValorELSE 99end as arredondamento 
Um exemplo rapido.
Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A.Jr consegui atingir meu objetivo. segue a função:

 

 

ALTER FUNCTION  [dbo].[fn_Arredondamento]--1254.96,1
(	
	@VALOR FLOAT,
	@CONS_MEC INT --- 1 CONS   2 MEC
)

RETURNS FLOAT

AS

BEGIN

IF @CONS_MEC =  1
  BEGIN
  DECLARE @VALOR_CENTAVOS INT =  (SUBSTRING((CAST(@Valor AS varchar)), (CHARINDEX('.',cast(@Valor as varchar))+1),3))
   DECLARE @VALOR_ARREDONDADO FLOAT
   
 IF LEN( @VALOR_CENTAVOS) = 1
  BEGIN
    SET @VALOR_CENTAVOS = (@VALOR_CENTAVOS * 10)
  END
  

 
IF @VALOR_CENTAVOS  <= 50 
 BEGIN
   IF @VALOR_CENTAVOS < 16 
     BEGIN
       SET @VALOR_ARREDONDADO =  FLOOR(@VALOR)     
     END
     
   ELSE
   
     BEGIN
            SET @VALOR_ARREDONDADO =  FLOOR(@VALOR) + 0.50
     END  
 END
 
ELSE

  BEGIN
     IF @VALOR_CENTAVOS <= 65 
       BEGIN
                SET @VALOR_ARREDONDADO =  FLOOR(@VALOR) + 0.50
       END
      ELSE
       BEGIN
             SET @VALOR_ARREDONDADO =  Ceiling(@Valor)
       END 
  END 


  
  END
 
	ELSE
	BEGIN
	
	SET @VALOR_ARREDONDADO = @VALOR
	END
   

 RETURN @VALOR_ARREDONDADO

    	 
END   

Valeu consegui através do seu exemplo. Abcs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.