2010-10-20 118 views
2

在MySql中存儲貨幣值的最佳方式是什麼?PHP:用於貨幣值的MySql數據類型

我已經看到了這一點:小數(5,2)

但那麼您可以在超過$ 999.99的金額不能進入。我的意思是我知道你可以將5改爲別的東西,但這似乎不是最合適的方式來做到這一點..然後我不知道這就是我發佈的原因。

我也看到存儲的數量也是一個無符號整數。那麼存儲貨幣價值的最有效方式是什麼?

+0

所有幣種均以美元爲單位。該值需要能夠表示正數和負數的數量..我不希望列類型舍入任何東西..小數位數是否會舍入數字? – Mickey 2010-10-20 21:42:58

+0

不,DECIMAL值不是四捨五入的 - 我必須檢查,但是我的假設是如果您嘗試以更高的精度插入十進制值,它們將被截斷(中斷,不是四捨五入)(IE:小數點後三位成兩位小數放置欄)。 – 2010-10-20 21:46:13

+0

是的,有兩個地方的建議如下。如果你劃分成本或增加稅收等,你一定會得到部分美分來處理。然後舍入將會發生。 – Kurucu 2010-10-20 21:46:17

回答

4

您預計您需要存儲多大的貨幣值? DECIMAL(15,2)會處理最會拋出的東西。

我也看到存儲的數量也是一個無符號整數。

無符號表示該值永遠不會爲負 - 如果出現這種情況,您需要額外的方法來指示該值爲負值。我不推薦這種方法。

+0

不知道,謝謝! – Mickey 2010-10-20 21:52:27

0

爲什麼不將值保存在最低可能的單位並讓腳本執行到通常表示的轉換?

這樣你可以將該值存儲爲一個整數。

+0

部分貨幣(IE:日元)沒有美分,具體而言。 – 2010-10-20 21:37:11

+0

我不認爲這很重要。將上述答案更改爲「以最低貨幣單位進行存儲」並且它可以正常工作。您只需要相應地調整貨幣轉換。 – Kurucu 2010-10-20 21:40:05

+0

@OMG小馬:即使這樣你可以將值保存在儘可能最低的實體中,這樣你就可以得到一個整數。 – Harmen 2010-10-20 21:40:10

1

你的決定必須包括你如何執行舍入。企業傾向於對他們有利的收益進行分析,而數學取整可能是首選,也可能不是關心。這些可能會影響您的存儲選擇。

1

那麼貨幣呢?如果您想要支持多個地區的分佈式客戶端,則需要嵌入每個貨幣值的貨幣/區域設置。其他數據庫如何處理這個問題?

對於帶符號整數值,決定什麼是「最小利息值」(您是否關心0.001c?這意味着您不介意在超過1000次連續交易中丟失1c - 這是例如,在計算對低值的興趣時也是重要的)。如果0.001c正常,那麼當您寫入表格時,將所有值乘以1000,當您讀回時除以1000 ...