Jaki jest najlepszy typ danych do przechowywania wartości procentowych w zakresie od 0,00% do 100,00%?
sql-server
types
sqldatatypes
Użytkownik
źródło
źródło
Odpowiedzi:
Zakładając dwa miejsca po przecinku na procentach, typ danych, których używasz, zależy od tego, jak planujesz je przechowywać. Jeśli zamierzasz przechowywać ich ułamkowy odpowiednik (np. 100,00% przechowywane jako 1,0000), przechowywałbym dane w
decimal(5,4)
typie danych zCHECK
ograniczeniem, które zapewnia, że wartości nigdy nie przekraczają 1,0000 (zakładając, że jest to limit) i nigdy nie spadają poniżej 0 (zakładając, że jest to podłoga). Jeśli zamierzasz przechowywać ich wartość nominalną (np. 100,00% jest przechowywane jako 100,00), to powinieneś używaćdecimal(5,2)
z odpowiednimCHECK
ograniczeniem. W połączeniu z dobrą nazwą kolumny wyjaśnia innym programistom, jakie są dane i jak są one przechowywane w kolumnie.źródło
decimal(5,2)
tam, gdzie 2 oznacza liczbę cyfr po separatorze dziesiętnym?decimal(5,2)
jest tym, co powinno zostać uchwycone za pomocą ograniczenia sprawdzającego.decimal(5,4)
i został zmienionydecimal(5,2)
po powyższym komentarzu ... Myślę, żedecimal(5,4)
byłaby lepsza definicja - tj. Chcesz zapisać od 0 do 1 z 2 miejscami po przecinku, a nie od 0 do 100. Powód, dla którego wartość procentowa jest poza 100; więc 100% to 100/100, czyli 1. Zrobienie tego w ten sposób ma większy sens w większości przypadków (np.100% * 100% = 100%
nie10000%
;1 * 1 = 1
).100.00
), Potrzebujeszdecimal(5,2)
. Jeśli wartości mają być przechowywane jako ułamki (np.1.0000
), Potrzebujeszdecimal(5,4)
. Zaktualizuje post.decimal
.columnName decimal(precision, scale)
. Precyzja mówi o całkowitej liczbie cyfr, które można przechowywać w liczbie, skala mówi, ile z nich jest po przecinku, więcdecimal(3,2)
jest to liczba, którą można przedstawić jak#.##
;decimal(5,3)
byłoby##.###
.decimal
inumeric
zasadniczo są tym samym. Jednakdecimal
jest zgodny z ANSI, więc zawsze używaj go, chyba że określono inaczej (np. Standardy kodowania firmy).Przykładowe scenariusze
decimal(5,4)
.decimal(3,2)
.Przykład:
Dalsze czytanie:
0 to 1
vs0 to 100
: C #: Przechowywanie procentów, 50 czy 0,50?źródło
Zgadzam się z Thomasem i wybrałbym rozwiązanie DECIMAL (5,4) przynajmniej dla aplikacji WPF.
Zajrzyj do ciągu formatu liczbowego MSDN, aby dowiedzieć się, dlaczego: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
Wtedy możesz użyć tego w swoim kodzie XAML:
źródło
Jeśli poziom precyzji to 2 miejsca po przecinku, to „smallint” poradzi sobie z tym na najmniejszej przestrzeni (2 bajty). Przechowujesz procent pomnożony przez 100.
EDYCJA: prawdopodobnie lepiej pasuje typ dziesiętny . Wtedy nie musisz ręcznie skalować. Zajmuje 5 bajtów na wartość.
źródło
Użyj numeric (n, n), gdzie n ma wystarczającą rozdzielczość, aby zaokrąglić do 1,00. Na przykład:
źródło