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))
Tenza
la source
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

Vous souhaitez utiliser la TRUNCATEcommande.

https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_truncate

jasonlfunk
la source
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

jmarceli
la source
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?

Hituptonie
la source
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

Alessandro Garcia
la source
0

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

CAST(vAvgMaterialUnitCost.`avgUnitCost` AS DECIMAL(11,2)) * woMaterials.`qtyUsed` AS materialCost
Tye Lucas
la source
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%

Grégory Bologne
la source