2008-10-23 17 views
16

Jaki jest najlepszy typ danych w SQL do reprezentowania wartości dziesiętnej w .NET?.NET Decimal = co w SQL?

Chcemy przechowywać liczby dziesiętne z dokładnością do 9 miejsc po przecinku i chcieć uniknąć błędów zaokrąglania itp. Z przodu.

Czytanie na temat typów danych, pojawia się za pomocą Decimal w .NET jest najlepszą opcją, ponieważ nie otrzymasz błędów zaokrąglenia, choć jest nieco wolniejszy niż Double.

Chcemy przenieść to do DB i potrzebować minimalnych problemów z konwersją podczas przenoszenia danych przez warstwy. Jakieś sugestie?

Odpowiedz

2

Jeśli używasz SQL Server, this table może pomóc odwzorowań typów danych.

25

Przeprowadziliśmy testy na serwerze SQL. Wygląda na to, że sql type decimal nie może w pełni przechowywać żadnego dziesiętnego .net.

Serwer SQL może przechowywać numer do 38 decimal digits long. To suma liczby cyfr po lewej i prawej stronie miejsca po przecinku. Ustawiasz "Skalę", która mówi serwerowi SQL, ile cyfr dziesiętnych ma zarezerwować dla liczby po prawej stronie miejsca dziesiętnego. Jeśli ustawisz skalę, która odejmuje liczbę cyfr po lewej stronie przecinka dziesiętnego. (Precyzja - Skala = liczba cyfr dziesiętnych po lewej stronie miejsca dziesiętnego)

. NET może reprezentować do 28 cyfr po prawej stronie przecinka dziesiętnego i 29 po lewej stronie. Wymagałoby to z dokładnością do 57 w SQL Server, ale maksymalna dostępna jest 38.

Więc jeśli chcesz uzyskać jak najwięcej precyzja jak to możliwe i numer są wystarczająco małe, to można to zrobić:

decimal(38, 28) 

Zostanie Ci 10 cyfr po lewej i 28 cyfr po prawej. Tak więc żadna liczba większa niż 9999999999 nie może być reprezentowana, ale nie można stracić precyzji podczas dokonywania transakcji typu walutowego.

Z drugiej strony, jeśli numery są bardzo duże można przechowywać je z niniejszym oświadczeniem:

decimal(38, 9) 

byłoby to pozwalają przechowywać największą liczbę osób, które mogą przechowywać .NET dziesiętny, który jest 29 cyfr długie. Zostawiłoby Ci tylko 8 cyfr dziesiętnych z dokładnością.

Jeśli nic nie brzmi zachęcająco, możesz je zapisać jako varchar. To pozwoliłoby na zapisanie dowolnej wartości dziesiętnej .net, ale nie pozwoliłoby to na wykonywanie obliczeń w SQL.