2009-03-06 8 views

Odpowiedz

40

Dziesiętny i pieniądze powinny być dość wiarygodne. To, co mogę zapewnić (z bolesnego osobistego doświadczenia z odziedziczonych aplikacji) to: NIE UŻYWAJ PŁASZCZA!

+1

Dlaczego nie? Z jakimi problemami korzystałeś z pływaka? –

+7

Błędy zaokrąglania najprawdopodobniej – nalply

+2

Jego aplikacja prawdopodobnie wyniosła kilka 200 000 kwot i zabrakło cyfr –

10

Chyba sprowadza się do precyzji i skali. IIRC, money to 4dp. Jeśli to w porządku, money wyraża twoje zamiary. Jeśli potrzebujesz większej kontroli, użyj decimal z określoną precyzją i skalą.

15

Zawsze używam dziesiętnego; Nigdy wcześniej nie korzystałem z PIENIĘDZY.

Niedawno znalazłem artykuł dotyczący przecinku kontra typu danych pieniądze w serwerze SQL, które można znaleźć ciekawe:

Money vs Decimal

Wydaje się również, że typ danych pieniądze nie zawsze prowadzić dokładne wyniki podczas Wykonaj z nim obliczenia: click

Co zrobiłem tak dobrze w przeszłości, używa pola INT i przechowywać kwotę w centach (eurocent/dollarcent).

+0

Czy mógłbyś wyjaśnić, w jaki sposób możemy reprezentować 100/3, 10/3 i 1/3, itp? – NoChance

4

To zależy od twojej aplikacji !!! Pracuję w usługach finansowych, w których zwykle uważamy, że cena jest znacząca, do 5 miejsc po przecinku, co oczywiście przy zakupie kilku milionów przy cenie 3.12345 pensów/centów to znaczna kwota. Niektóre aplikacje dostarczą własny typ sql, aby to obsłużyć.

Z drugiej strony może nie być to konieczne. <Humor> Stawki dla wykonawców zawsze były zaokrąglane do najbliższych 100 funtów, ale obecnie wydają się być najbliższe 25 funtów w obecnym kryzysie kredytowym. </Humor >

1

Zastosowanie dziesiętny i używać więcej miejsc dziesiętnych, niż myślisz trzeba będzie tak, że caclulations będą poprawne. Pieniądze nie zwracają poprawnych wyników w obliczeniach. Pod żadnym pozorem nie używaj float lub real, ponieważ są to niedokładne typy danych i mogą powodować błędne obliczenia (zwłaszcza, że ​​stają się bardziej złożone).

2

Nie wyrównaj swoich przemyśleń na podstawie dostępnych typów danych. Zamiast tego przeanalizuj swoje wymagania, a następnie sprawdź, który typ danych pasuje najlepiej. Float jest zawsze najgorszym wyborem, biorąc pod uwagę ograniczenie architektury w przechowywaniu binarnej wersji liczb zmiennoprzecinkowych. Pieniądze to standardowa jednostka i na pewno będą miały większe wsparcie w zakresie obsługi operacji związanych z pieniędzmi. W przypadku dziesiętnych, będziesz musiał obsłużyć każdy i wszystko, ale wiesz, że tylko ty obsługujesz rodzaj dziesiętny, a więc nie ma niespodzianek, które możesz uzyskać z innymi dwoma typami danych.

1

W przypadku niektórych danych (np. Pieniędzy), w których nie ma aproksymacji lub zmian wynikających z wartości zmiennoprzecinkowej, należy upewnić się, że dane nigdy nie są "zmienne", muszą być sztywne po obu stronach kropki dziesiętnej.
Jednym z łatwych do uzyskania sposobów jest przekonwertowanie go na typ danych INTEGER i upewnienie się, że podczas odczytywania wartości separator dziesiętny jest umieszczany we właściwym miejscu.
np.
1. Aby zapisać 240,10 USD w bazie danych.
2. Konwersja do czystej postaci całkowitej: 24010 (wiesz, że to tylko przesunięcie dziesiętne).
3. Przywrócić z powrotem do właściwego stanu dziesiętnego. Umieść dziesiętny na 2 pozycje od prawej. 240,10 USD

Tak więc, będąc w databse, będzie to sztywna liczba całkowita.