2014-12-05 37 views
-1

我看到類似問題herehere的一些答案。似乎每個人都建議使用DECIMAL類型的價格。但是,由於通常價格不會低於1美分,我可以通過將單位從「美元」更改爲「美分」來使用INT類型的價格嗎?例如7.99美元與799美分相同。INT與DECIMAL在MySQL中的「價格」列?

在使用函數(MIN,MAX,SUM等)或其他方面的時候,關於存儲空間,讀/寫速度,性能選擇INT類似DECIMAL(9,2)還是有優勢嗎?

+0

計算速度可能更快,但其價值不太直觀。我會建議使用更直觀的版本,將小數點位置放在正確的位置 - 存儲值爲仙似乎是一個等待發生的錯誤。 – 2014-12-05 18:02:20

+0

我聽說(/看到?)它認爲存儲整數有性能優勢。我個人不相信。我懷疑這個數據集必須是真正巨大的纔能有所作爲。 – Strawberry 2014-12-05 18:03:09

+0

@GordonLinoff:什麼樣的bug?這是一種常用的方法。 – 2014-12-05 18:03:47

回答

-2

我會建議使用美分,因爲浮動難以管理的計算機。例如,如果我能記得0,1 + 0,2在js中不會返回0,3。

因此,尤其是在處理金錢時,我認爲最好的做法是使用美分。

編輯:也許我還不夠清楚。看看tadman留下的長篇評論,以更詳細的方式解釋我的想法。

現在的問題是有沒有什麼優勢,以選擇INT比其他人。我的回答是肯定的,因爲當你處理腳本中的信息時(因爲通常不會單獨使用db,會發生什麼情況),所以最好使用int來操縱貨幣。這有點不合理嗎?也許,這取決於你有多寬廣。它值得-1嗎?我不這麼認爲。

+0

浮點數不是小數。 – Strawberry 2014-12-05 18:03:48

+2

誰提過花車?問題是int與decimal。 – 2014-12-05 18:14:12

+0

數據庫的意義是什麼?用於腳本否? – M0rkHaV 2014-12-05 18:32:56

1

我建議用最簡單的舊整數表示最小單位的貨幣值。通常對於像美元這種意味着使用美分的東西,雖然在某些情況下您可能需要使用更小的單位。一個例子就是支付5%的佣金,交易只有幾美分,否則四捨五入將導致零。在這種情況下,使用「毫升」可能會更好。

儘管固定位置DECIMAL(9,2)列將忠實保留值,但您使用的應用程序平臺可能不會將它們視爲很好,並且如果您不小心可能會導致奇怪的浮點行爲。

將美元和內部單位轉換爲代表它們可能有點令人討厭,但這比討論會計所有資金缺失的問題要麻煩得多。

在性能方面,INT的值默認是最快的。它們也是最簡潔的一般術語。如果您需要存儲超過+/- 2.1B的值,如果您處理的是大量美元,則可能需要使用BIGINT。如果您的應用程序腳本語言(如果沒有準備好的話)可能會將這些語言渲染爲浮動並導致問題,則可能會出現問題。

像往常一樣,用大的窮舉地測試您的代碼。