web-dev-qa-db-fra.com

SQL - Arrondir à 2 décimales

Je dois convertir les minutes en heures, arrondies à 2 décimales.J'ai également besoin d'afficher uniquement 2 chiffres après le signe décimal. Donc, si j’ai des minutes à 650. Les heures devraient être de 10,83.

Voici ce que j'ai jusqu'à présent:

Select round(Minutes/60.0,2) from ....

Mais dans ce cas, si mes minutes sont, disons, 630 heures, 10,5000000. Mais je le veux à 10,50 seulement (après avoir arrondi). Comment puis-je y arriver?

203
user656523

Ne pourriez-vous pas convertir votre résultat sous la forme numeric(x,2)? Où x <= 38

select 
    round(630/60.0,2), 
    cast(round(630/60.0,2) as numeric(36,2))

Résultats

10.500000   10.50
357
u07ch

Comme avec SQL Server 2012, vous pouvez utiliser la fonction de formatage intégrée :

SELECT FORMAT(Minutes/60.0, 'N2')

(juste pour d'autres lectures ...)

70
Matten

vous pouvez utiliser

select cast((630/60.0) as  decimal(16,2))
23
Ram
Declare @number float = 35.44987665;
Select round(@number,2) 
12
DECLARE @porcentaje FLOAT

SET @porcentaje = (CONVERT(DECIMAL,ABS(8700)) * 100) / CONVERT(DECIMAL,ABS(37020))

SELECT @porcentaje
4
Anastacio Valdez
CAST(QuantityLevel AS NUMERIC(18,2))
4
Shahbaz Raees2

Tout ce que vous utilisez en dénomination devrait être en décimal, par exemple, 1548/100 donnera 15.00

Si nous remplaçons 100 par 100.0 dans notre exemple, nous obtiendrons 15.48

select 1548/100 
15.00000

select 1548/100.0
15.4800

0
3
nitin157

Convertissez votre numéro en Numeric ou Decimal.

Remplacez votre requête par la suivante.

serveur SQL

Select Convert(Numeric(38, 2), Minutes/60.0) from ....

MySql:

Select Convert(Minutes/60.0, Decimal(65, 2)) from ....

La fonction Cast est un wrapper pour la fonction Convert. Ajoutez à cela SQL avec un langage interprété et le résultat est que même si les deux fonctions produisent les mêmes résultats, il se passe un peu plus dans les coulisses de la fonction Cast. L'utilisation de la fonction Convert représente une petite économie, mais de petites économies se multiplient.

3

La requête suivante est utile et simple

declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

Donne une sortie de 0,25.

3
ShaileshDev

Fonctionne à la fois avec postgresql et Oracle

SELECT ename, sal, round(((sal * .15 + comm) /12),2) 
FROM emp where job = 'SALESMAN' 
3
manas mukherjee

En complément des réponses ci-dessous, lorsque vous utilisez des types de données INT ou non décimaux dans vos formules, n'oubliez pas de multiplier la valeur par 1 et le nombre de décimales que vous préférez.

c'est-à-dire - TotalPackages est un INT et donc le dénominateur TotalContainers, mais je souhaite que mon résultat comporte jusqu'à 6 décimales.

ainsi:

((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,
2
Fandango68

essayez ceci: SELECT CAST(ROUND([Amount 1]/60,2) AS DECIMAL(10,2)) as TOTAL

2
Quintin moodley

L'extrait suivant pourrait vous aider:

select SUBSTR(ENDDTTM,1, 9), extract(DAY FROM (ENDDTTM)), ENDDTTM, BEGINDTTM,  (ENDDTTM - BEGINDTTM),substr(BEGINDTTM, 1,15), substr((ENDDTTM - BEGINDTTM), 12, 8),
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 3600 + substr((ENDDTTM - BEGINDTTM), 15, 2)*60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)),2) as seconds,
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 60 + substr((ENDDTTM - BEGINDTTM), 15, 2) +  substr((ENDDTTM - BEGINDTTM), 18, 2)/60 ), 2)as minutes,
round((substr((ENDDTTM - BEGINDTTM), 12, 2) + substr((ENDDTTM - BEGINDTTM), 15, 2)/60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)/3600 ),2)  as hours
1
Venkat

Je trouve que la fonction STR est le moyen le plus propre de le faire.

SELECT STR(ceiling(123.415432875), 6, 2)
0
idro2k