Sformatuj liczbę do 2 miejsc po przecinku


154

Chciałbym wiedzieć, jak wyświetlić liczbę z 2 miejscami po przecinku, bez zaokrąglania pierwotnej liczby.

Na przykład:

2229,999 -> 2229,99

Już próbowałem:

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

wygląda na to, że próbujesz użyć poleceń do obcięcia. Dlaczego po prostu nie skorzystać z wbudowanej funkcjonalności?
— Fallenreaper,

Nie trzeba być przecinek DECIMAL(6,2)). 6- Dokładność (całkowita liczba cyfr), a 2 to liczba cyfr po przecinku?
— user5249203

Odpowiedzi:


82

9
Obcinanie zawsze „zaokrągla” w dół. 1,999 skrócone do 2 DP to 1,99, gdzie 2,00 byłoby matematycznie bardziej poprawne. Jeśli to nie jest problem, obcięcie jest w porządku, ale powinieneś być tego świadomy.
— GordonM

Zgadzam się z GordonM i TRUNCATE powinno być używane z przyczynami, zwłaszcza z liczbami zmiennoprzecinkowymi!
— Nebulosar

364

Podczas formatowania liczby do 2 miejsc po przecinku masz dwie opcje TRUNCATEi ROUND. Szukasz TRUNCATEfunkcji.

Przykłady:

Bez zaokrągleń:

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

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

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

Z zaokrągleniem:

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

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

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


2
powinieneś używać truncatedo formatowania liczb, jeśli chcesz liczb obciętych. w pytaniu dała jasno do zrozumienia, że ​​właśnie tego chce. istnieje wiele sposobów zaokrąglania (podłoga, sufit, od zera, do zera, do połowy w górę, do połowy w dół, w połowie równe). są odpowiednie w różnych kontekstach.
— Kip

16
tak, oczywiście, ale jak widzę, wiele osób uważa, że ​​moja odpowiedź była pomocna lub może znaleźli to pytanie, szukając polecenia ROUND. Zostawię to tak, jak jest.
— jmarceli

"nie powinieneś używać TRUNCATE do formatowania liczb, ponieważ po prostu stracisz obcięte cyfry" => Cóż, o to chodzi w obcięciu ... Nie widzę, jak powinniśmy uzyskać 0,17 z Math. Twoja odpowiedź jest idealna do przykładów programowania, ale nie jest zbyt dokładna.
— Benoit Duffez,

2
Jak mówiłem wcześniej. WIEM, że to nie jest poprawna odpowiedź na to pytanie, ale ludziom się to podoba :) Może z powodu tytułu pytania, które mogłoby być wynikiem wyszukiwania dla osoby szukającej ROUNDfunkcji.
— jmarceli

W takim razie powinieneś to naprawić. Nadal będę przydatny dla wszystkich i będzie w 100% poprawny. Win-win :)
— Benoit Duffez,

14

Co powiesz CAST(2229.999 AS DECIMAL(6,2)) na uzyskanie ułamka dziesiętnego z dwoma miejscami po przecinku


4
Myślę, że masz na myśli obsadę (2229,999 jako dziesiętne (4,2))
— Wujek Iroh

@UncleIroh, Nie, myślę, że on faktycznie ma na myśli convert(2229.999 as decimal(4,2)).
— Pacerier

3
@Pacerier - Oba działają technicznie. Jednak format konwersji to konwersja (2229,999, dziesiętna (4,2)) z przecinkiem, więc prawdopodobnie masz rację, o to mu chodziło.
— Wujek Iroh

@UncleIroh, Ach tak, moja literówka powyżej. Mówiłem o convert(2229.999, decimal(4,2)).
— Pacerier

4
CAST (2229,999 AS DECIMAL (4,2)) daje 99,99. DECIMAL to maksymalna liczba cyfr, w tym 2 po lewej stronie miejsca dziesiętnego. CAST (2229,99 AS DECIMAL (6,2)) da ci 2230,00
— russjohnson09


0

Oto jak użyłem tego jako przykładu:

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

0

Pokaż jako dziesiętne Wybierz ifnull (format (100,00, 1, 'en_US'), 0) 100.0

Pokaż jako procent Wybierz konkat (ifnull (format (100,00, 0, 'en_US'), 0), '%') 100%

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.