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))

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

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


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


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


0

Ini adalah bagaimana saya menggunakan ini sebagai contoh:

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

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%

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.