2 votes

Suppression des zéros en tête et en queue et obtention du résultat en deux décimales

Je voulais supprimer à la fois les zéros de tête et de queue, et je veux avoir le résultat en deux décimales. Par exemple : si le nombre est 0.01, je veux voir .01; si le nombre est 0.010, je veux voir .01; si le nombre est 0.10, je veux voir .10; si le nombre est 1, je veux voir 1.00.

Je vais utiliser une fonction FORMAT. Par exemple :

SELECT FORMAT (0.090, '#.######') 

fonctionne bien car elle affiche .09

Cependant, lorsque j'utilise la même instruction pour une valeur supérieure à 1, elle ne montre pas les décimales.

Par exemple :

SELECT FORMAT (10, '#.######') 

donne 10 alors que je m'attends à 10.00

J'ai essayé d'utiliser une instruction CASE pour résoudre cela en vain. Une instruction CASE fonctionne bien pour une valeur supérieure à 1, mais elle ne supprime pas les zéros de tête.

DECLARE @a float = 10
SELECT
CASE 
    WHEN @a <1 THEN  format (@a, '#.######') 
    ELSE CAST(FORMAT(@a, '#.######') AS money) 
END 

donne 10.00 comme je m'y attendais. Cependant, lorsque la valeur de @a est par exemple 0.090, elle donne 0.09 alors que je m'attends à .09

Y a-t-il un moyen de supprimer à la fois les zéros de tête et de queue et d'avoir le résultat en deux décimales? Tout guide est grandement apprécié.

1voto

Nicola Lepetit Points 410

Alors que je suis d'accord avec D Stanley que 'La mise en forme est la responsabilité de la couche d'affichage', je sais qu'il arrive parfois que vous ayez besoin de certaines fonctions un peu sales à utiliser à l'intérieur de procédures stockées ou d'autres fonctions. Essayez avec celle-ci:

CREATE FUNCTION dbo.toStr(@a float)  
RETURNS varchar(12)
AS 
BEGIN  
  DECLARE @ret varchar(12)
  SELECT @ret =
   CASE 
    WHEN @a < 1 THEN replace(format(@a, '.##'), '0.','.')
    ELSE FORMAT(@a, '#.00')
   END 
  RETURN @ret 
END;

J'ai testé avec les valeurs suivantes:

select dbo.toStr(0.090);  -- .09
select dbo.toStr(1.09);   -- 1.09
select dbo.toStr(10.00);  -- 10.00
select dbo.toStr(1.2);    -- 1.20

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X