Formatta il numero con 2 cifre decimali


154

Vorrei sapere come posso generare un numero con 2 cifre decimali, senza arrotondare il numero originale.

Per esempio:

2229,999 -> 2229,99

Ho già provato:

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

sembra che tu stia cercando di usare i comandi per troncare. Perché non usare solo la funzionalità integrata?
Fallenreaper,

Non hai bisogno del decimale per essere DECIMAL(6,2)). 6- Precisione (numero di cifre totali) e 2 è il numero di cifre dopo i decimali?
user5249203,

Risposte:


82

9
Tronca sempre "arrotondati" verso il basso. 1.999 troncato a 2 DP sarebbe 1.99 dove 2.00 sarebbe matematicamente più corretto. Se questo non è un problema, allora troncare va bene, ma dovresti esserne consapevole.
GordonM,

Sono d'accordo con GordonM e TRUNCATE dovrebbe essere usato con causalità, specialmente con numeri in virgola mobile!
Nebulosar,

364

Quando si formatta il numero con 2 cifre decimali sono disponibili due opzioni TRUNCATEe ROUND. Stai cercando TRUNCATEfunzionalità.

Esempi:

Senza arrotondamento:

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

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

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

Con arrotondamento:

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

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

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


2
dovresti usare truncateper formattare i numeri quando vuoi numeri troncati. ha chiarito in modo chiaro che questo è ciò che voleva fare. ci sono molti modi per arrotondare (pavimento, soffitto, via da zero, verso zero, metà su, metà giù, metà pari). sono appropriati in contesti diversi.
Kip

16
sì certo, ma come posso vedere molte persone trovano che la mia risposta è stata utile o forse hanno trovato questa domanda quando cercavano il comando ROUND. Lo lascerò così com'è.
jmarceli,

"non dovresti usare TRUNCATE per formattare i numeri perché perderai semplicemente cifre troncate" => Bene, questo è il punto di troncatura ... Non vedo come dovremmo ottenere 0.17 con Math. La tua risposta è perfetta per esempi di programmazione ma non è molto approfondita.
Benoit Duffez,

2
Come ho detto prima. So che non è una risposta corretta per questa domanda, ma la gente tende a gradirla :) Forse a causa del titolo della domanda che potrebbe essere il risultato della ricerca per qualcuno che sta cercando la ROUNDfunzione.
jmarceli,

Quindi dovresti risolverlo. Sarò ancora utile per tutti e sarà corretto al 100%. Win-win :)
Benoit Duffez,

14

Che ne dici CAST(2229.999 AS DECIMAL(6,2)) di ottenere un decimale con 2 decimali


4
Penso che intendi cast (2229.999 come decimale (4,2))
Zio Iroh

@UncleIroh, No, penso che in realtà significhi convert(2229.999 as decimal(4,2)).
Pacerier,

3
@Pacerier - Entrambi funzionano tecnicamente. Tuttavia, il formato per convertire è convert (2229.999, decimale (4,2)) con una virgola, quindi probabilmente hai ragione in quello che stava cercando.
Zio Iroh,

@UncleIroh, Ah sì, il mio errore di battitura sopra. Stavo parlando convert(2229.999, decimal(4,2)).
Pacerier,

4
CAST (2229.999 COME DECIMALE (4,2)) ti darà 99,99. DECIMAL è il numero massimo di cifre incluso il 2 a sinistra del decimale. CAST (2229.99 COME DECIMALE (6,2)) ti darà 2230,00
russjohnson09

8

Basta usare il formato (numero, qtà Decimali) campione: formato (1000, 2) risultato 1000,00


0

Ecco come l'ho usato come esempio:

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

0

Mostra come decimale Seleziona ifnull (formato (100.00, 1, 'en_US'), 0) 100.0

Mostra come percentuale Seleziona concat (ifnull (format (100.00, 0, 'en_US'), 0), '%') 100%

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.