Apa tipe data terbaik untuk menyimpan nilai persen mulai dari 0,00% hingga 100,00%?
sql-server
types
sqldatatypes
Pengguna
sumber
sumber
Jawaban:
Dengan asumsi dua tempat desimal pada persentase Anda, tipe data yang Anda gunakan bergantung pada bagaimana Anda berencana untuk menyimpan persentase Anda. Jika Anda akan menyimpan padanan pecahannya (misalnya 100,00% disimpan sebagai 1,0000), saya akan menyimpan data dalam
decimal(5,4)
tipe data denganCHECK
batasan yang memastikan bahwa nilainya tidak pernah melebihi 1,0000 (dengan asumsi itu adalah batasnya) dan tidak pernah di bawah 0 (dengan asumsi itu adalah lantai). Jika Anda akan menyimpan nilai nominalnya (misalnya 100,00% disimpan sebagai 100,00), maka Anda harus menggunakandecimal(5,2)
denganCHECK
batasan yang sesuai . Dikombinasikan dengan nama kolom yang bagus, ini menjelaskan kepada pengembang lain apa itu data dan bagaimana data disimpan di kolom.sumber
decimal(5,2)
mana 2 menunjukkan jumlah digit setelah pemisah desimal?decimal(5,2)
adalah apa yang harus ditangkap dengan kendala cek.decimal(5,4)
dan diubah menjadidecimal(5,2)
setelah komentar di atas ... Saya pikirdecimal(5,4)
akan menjadi definisi yang lebih baik - yaitu Anda ingin menyimpan 0 ke 1 dengan 2 tempat desimal, bukan 0 ke 100. Alasan persentase keluar dari 100; jadi 100% adalah 100/100 yaitu 1. Melakukan dengan cara ini lebih masuk akal untuk banyak kasus (mis.100% * 100% = 100%
, bukan10000%
;1 * 1 = 1
).100.00
) maka Anda perludecimal(5,2)
. Jika nilai akan disimpan sebagai pecahan (misalnya1.0000
), maka Anda perludecimal(5,4)
. Akan memperbarui posting.decimal
.columnName decimal(precision, scale)
. Presisi menunjukkan jumlah digit yang dapat ditahan dalam angka, skala menunjukkan berapa banyak dari angka tersebut setelah tempat desimal, begitudecimal(3,2)
juga angka yang dapat direpresentasikan sebagai#.##
;decimal(5,3)
akan##.###
.decimal
dannumeric
pada dasarnya adalah hal yang sama. Namundecimal
sesuai dengan ANSI, jadi selalu gunakan itu kecuali diberitahu sebaliknya (misalnya oleh standar pengkodean perusahaan Anda).Contoh Skenario
decimal(5,4)
.decimal(3,2)
.Contoh:
Bacaan lebih lanjut:
0 to 1
vs0 to 100
: C #: Menyimpan persentase, 50 atau 0,50?sumber
Saya setuju dengan Thomas dan saya akan memilih solusi DECIMAL (5,4) setidaknya untuk aplikasi WPF.
Lihat MSDN Numeric Format String untuk mengetahui alasannya: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
Maka Anda akan dapat menggunakan ini di kode XAML Anda:
sumber
Jika 2 tempat desimal adalah tingkat ketepatan Anda, maka "smallint" akan menangani ini di ruang terkecil (2-byte). Anda menyimpan persen dikalikan dengan 100.
EDIT: Jenis desimal mungkin lebih cocok. Maka Anda tidak perlu menskalakan secara manual. Dibutuhkan 5 byte per nilai.
sumber
Gunakan numerik (n, n) di mana n memiliki resolusi yang cukup untuk dibulatkan menjadi 1,00. Misalnya:
sumber