Memformat angka menjadi 2 tempat desimal

154

Saya ingin tahu bagaimana cara menghasilkan angka dengan 2 tempat desimal, tanpa membulatkan angka aslinya.

Sebagai contoh:

2229,999 -> 2229,99

Saya sudah mencoba:

FORMAT(2229.999, 2)
CONVERT(2229.999, DECIMAL(4,2))
Tenza
sumber
sepertinya Anda mencoba menggunakan perintah untuk memotong. Mengapa tidak menggunakan fungsi internal saja?
Fallenreaper
Bukankah Anda perlu desimal untuk menjadi DECIMAL(6,2)). 6- Presisi (jumlah digit total) dan 2 adalah jumlah digit setelah desimal?
user5249203

Jawaban:

82

Anda ingin menggunakan TRUNCATEperintah.

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

jasonlfunk
sumber
9
Potong selalu "putaran" ke bawah. 1,999 terpotong ke 2 DP akan menjadi 1,99 di mana 2,00 secara matematis akan lebih benar. Jika itu bukan masalah maka potong saja baik-baik saja tetapi Anda harus menyadarinya.
GordonM
Saya setuju dengan GordonM dan TRUNCATE harus digunakan dengan penyebab, terutama dengan angka floating point!
Nebulosar
364

Saat memformat angka ke 2 tempat desimal Anda memiliki dua opsi TRUNCATEdan ROUND. Anda mencari TRUNCATEfungsi.

Contoh:

Tanpa pembulatan:

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

Dengan pembulatan:

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

Jmarceli
sumber
2
Anda harus menggunakan truncateuntuk memformat angka ketika Anda ingin nomor terpotong. dia membuatnya cukup jelas dalam pertanyaan bahwa inilah yang ingin dia lakukan. ada banyak cara pembulatan (lantai, langit-langit, jauh-dari-nol, menuju-nol, setengah-atas, setengah-bawah, setengah-bahkan). mereka sesuai dalam konteks yang berbeda.
Kip
16
ya tentu saja, tetapi seperti yang saya lihat banyak orang menemukan bahwa jawaban saya sangat membantu atau mungkin mereka menemukan pertanyaan ini ketika mereka mencari perintah ROUND. Aku akan membiarkannya apa adanya.
jmarceli
"Anda seharusnya tidak menggunakan TRUNCATE untuk memformat angka karena Anda hanya akan kehilangan angka terpotong" => Yah, itulah titik dari pemotongan ... Saya tidak melihat bagaimana kita harus mendapatkan 0,17 dengan Matematika. Jawaban Anda sempurna untuk contoh pemrograman tetapi tidak terlalu menyeluruh.
Benoit Duffez
2
Seperti yang saya katakan sebelumnya. Saya TAHU itu bukan jawaban yang benar untuk pertanyaan ini tetapi orang-orang cenderung menyukainya :) Mungkin karena judul pertanyaan yang bisa menjadi hasil pencarian untuk seseorang yang mencari ROUNDfungsi.
jmarceli
Maka Anda harus memperbaikinya. Saya masih akan berguna untuk semua orang, dan itu akan benar 100%. Menang-menang :)
Benoit Duffez
14

Bagaimana CAST(2229.999 AS DECIMAL(6,2)) mendapatkan desimal dengan 2 tempat desimal

Hituptony
sumber
4
Saya pikir maksud Anda pemeran (2229.999 sebagai desimal (4,2))
Paman Iroh
@UncleIroh, Tidak, saya pikir dia benar-benar berarti convert(2229.999 as decimal(4,2)).
Pacerier
3
@Pacerier - Keduanya berfungsi secara teknis. Namun format untuk konversi adalah convert (2229.999, desimal (4,2)) dengan koma, jadi Anda mungkin benar bahwa itulah yang ia inginkan.
Paman Iroh
@UncleIroh, Ah ya, salah ketik saya di atas. Saya sedang berbicara tentang convert(2229.999, decimal(4,2)).
Pacerier
4
CAST (2229.999 AS DECIMAL (4,2)) akan memberi Anda 99,99. DECIMAL adalah jumlah digit maksimum termasuk 2 di sebelah kiri tempat desimal. CAST (2229.99 AS DECIMAL (6,2)) akan memberi Anda 2230.00
russjohnson09
8

Cukup gunakan format (angka, qtyDecimals) contoh: format (1000, 2) hasil 1000.00

Alessandro Garcia
sumber
0

Ini adalah bagaimana saya menggunakan ini sebagai contoh:

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

Tampilkan sebagai desimal Pilih ifnull (format (100.00, 1, 'en_US'), 0) 100.0

Tampilkan sebagai Persentase Pilih concat (ifnull (format (100.00, 0, 'en_US'), 0), '%') 100%

Gregory Bologna
sumber