Formater le nombre à 2 décimales


154

Je voudrais savoir comment puis-je produire un nombre avec 2 décimales, sans arrondir le nombre d'origine.

Par exemple:

2229,999 -> 2229,99

J'ai déjà essayé:

FORMAT(2229.999, 2)
CONVERT(2229.999, DECIMAL(4,2))

il semble que vous essayez d'utiliser des commandes pour tronquer. Pourquoi ne pas simplement utiliser la fonctionnalité intégrée?
Fallenreaper

N'avez-vous pas besoin de la décimale DECIMAL(6,2)). 6- Précision (nombre de chiffres au total) et 2 est le nombre de chiffres après la décimale?
user5249203

Réponses:


82

9
Tronquer toujours "arrondit" vers le bas. 1,999 tronqué à 2 DP serait 1,99 où 2,00 serait mathématiquement plus correct. Si ce n'est pas un problème, tronquez bien, mais vous devez en être conscient.
GordonM

Je suis d'accord avec GordonM et TRUNCATE doit être utilisé avec causalité, en particulier avec des nombres à virgule flottante!
Nebulosar

364

Lors du formatage du nombre à 2 décimales, vous avez deux options TRUNCATEet ROUND. Vous recherchez la TRUNCATEfonction.

Exemples:

Sans arrondi:

TRUNCATE(0.166, 2)
-- will be evaluated to 0.16

TRUNCATE(0.164, 2)
-- will be evaluated to 0.16

documents: http://www.w3resource.com/mysql/mathematical-functions/mysql-truncate-function.php

Avec arrondi:

ROUND(0.166, 2)
-- will be evaluated to 0.17

ROUND(0.164, 2)
-- will be evaluated to 0.16

documents: http://www.w3resource.com/mysql/mathematical-functions/mysql-round-function.php


2
vous devez utiliser truncatepour formater les nombres lorsque vous voulez des nombres tronqués. elle a dit clairement dans la question que c'est ce qu'elle voulait faire. il existe de nombreuses façons d'arrondir (plancher, plafond, éloigné de zéro, vers zéro, mi-haut, mi-bas, mi-pair). ils sont appropriés dans différents contextes.
Kip le

16
oui bien sûr, mais comme je peux le voir, beaucoup de gens trouvent que ma réponse a été utile ou peut-être qu'ils ont trouvé cette question lorsqu'ils cherchaient une commande ROUND. Je vais le laisser tel quel.
jmarceli

"vous ne devriez pas utiliser TRUNCATE pour formater des nombres car vous perdrez simplement des chiffres tronqués" => Eh bien, c'est le point de troncature ... Je ne vois pas comment on devrait obtenir 0,17 avec Math. Votre réponse est parfaite pour la programmation d'exemples, mais elle n'est pas très approfondie.
Benoit Duffez

2
Comme je le disais avant. JE SAIS que ce n'est pas une réponse correcte pour cette question mais les gens ont tendance à l'aimer :) Peut-être à cause du titre de la question qui pourrait être le résultat de la recherche pour quelqu'un qui recherche la ROUNDfonction.
jmarceli

Ensuite, vous devriez le réparer. Je serai toujours utile pour tout le monde, et ce sera correct à 100%. Win-win :)
Benoit Duffez

14

Que diriez-vous CAST(2229.999 AS DECIMAL(6,2)) d'obtenir une décimale avec 2 décimales?


4
Je pense que vous voulez dire cast (2229,999 en décimal (4,2))
Oncle Iroh

@ OncleIroh, Non, je pense qu'il veut vraiment dire convert(2229.999 as decimal(4,2)).
Pacerier

3
@Pacerier - Les deux fonctionnent techniquement. Cependant, le format de conversion est converti (2229.999, décimal (4,2)) avec une virgule, vous avez donc probablement raison de dire que c'était ce qu'il recherchait.
Uncle Iroh

@ OncleIroh, Ah oui, ma faute de frappe ci-dessus. Je parlais convert(2229.999, decimal(4,2)).
Pacerier

4
CAST (2229.999 AS DECIMAL (4,2)) vous donnera 99,99. DECIMAL est le nombre maximum de chiffres, y compris le 2 à gauche de la décimale. CAST (2229.99 AS DECIMAL (6,2)) vous donnera 2230,00
russjohnson09

8

Utilisez simplement l'exemple de format (nombre, qtyDecimals): format (1000, 2) résultat 1000,00


0

Voici comment j'ai utilisé ceci à titre d'exemple:

CAST(vAvgMaterialUnitCost.`avgUnitCost` AS DECIMAL(11,2)) * woMaterials.`qtyUsed` AS materialCost

0

Afficher en décimal Sélectionnez ifnull (format (100.00, 1, 'en_US'), 0) 100.0

Afficher en pourcentage Sélectionnez concat (ifnull (format (100.00, 0, 'en_US'), 0), '%') 100%

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.