2012-06-08 5 views
12

Bu soruya daha önce defalarca sorulmuştur, ancak konuyla ilgili birbiriyle çelişen fikirler buldum, bu yüzden daha birleşik bir sonucun umuduyla onu tekrar gündeme getireceğimi düşündüm.MySQL veritabanında para birimi değerlerini kaydetme

Veritabanımda bir para birimi değeri depolamak istiyorum. Tüm girişlerin aynı tür para birimi olduğunu (örneğin USD) ve hem olumlu hem de negatif değerlere izin verileceğini varsayalım.

İlk düşüncem, değeri ilişkili para biriminin en küçük birimi cinsinden imzalı bir tamsayı olarak saklamaktı. Örneğin, $ 1.25 değerini saklamak istersem, veritabanının en küçük birimi 0,01 dolar olduğu için veri tabanına 125 eklerim. Bu yöntemle ilgili güzel şey, MySQL'in otomatik olarak en yakın tam sayıya yuvarlanmasıdır. Örneğin, dolar değeri 1,259 dolarsa, 125.9 ekleyebilir ve bu sayede otomatik olarak 126 veya 1.26 $ olarak kaydedilebilir.

Peki, sizce ne düşünüyorsunuz? Bu sağlam bir yaklaşım mı yoksa daha iyi bir yolu var mı?

+1

'Ondalık (s, s)' http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html – DavidO

+0

Ah, bu çok daha mantıklıdır. Ardından, sayıyı görüntülemeden önce 100 ile bölmeye gerek yoktur. Teşekkürler! –

cevap

13

Finansal veriler DECIMAL(p,s) olarak kaydedilebilir, burada p anlamlı basamakların sayısıdır ve s skaladır (ondalık noktasının sağında yer sayısı). Bakınız The MySQL documentation. O'Reilly High Performance MySQL den Ayrıca

, bölüm 3:

"... Eğer kesirli sayılar için kesin sonuçları yalnızca gereksinim duyduğunuzda DECIMAL kullanmalıdır - örneğin, mali verileri saklarken." O'Reilly Learning MySQL itibaren

:

DECIMAL "... ... Yaygın olarak kullanılan bir sayısal türü, maaş ya da mesafe olarak sabit noktası numarasını saklar"

olduğu

Ve MySQL Pocket Reference:

DECIMAL"

... Sto parasal değerler gibi hassaslığın olduğu kritik nokta res numaraları.

2

Tanımladığınız yaklaşımda yanlış bir şey yok. Bu soru söz konusu olduğunda doğru ya da yanlış yoktur. Kullanıcıya bir $ değeri göstermek için her zaman bir bölümleme işlemi veya bir çeşit biçimlendirme yapmanız gerekeceğini aklınızda bulundurmalısınız.

Her şey sent ya da dolarsa formüllerinizin/hesaplarınızın hata ayıklanması daha kolay olacak mı? Değerleri sent veya dolar cinsinden mi göstereceksin?

Bunu basit bir şekilde tutun, ancak her iki şekilde de ondalık bir sayı kullanmanız gerekir.

+1

Aslında doğruluk gerekiyorsa, bunu bir int olarak depolayamazsınız, çünkü hükümet vergileri gibi şeyler için gerekli olan kesirli değerleri kaybedersiniz. – Alan