小型電商系統資料庫中的價格類型設計

來源:互聯網
上載者:User

標籤:

今天分享一個小型電商系統的資料庫價格欄位的資料類型設計。附上通用四捨五入轉換方法

我們知道,價格欄位使用的類型,最佳的有兩個,分別為:decimal,money;而money小數部分只能精確到4位,雖然money在記憶體上是比decimal少那麼一個位元組,但是現在硬碟那麼大,不用計較了。

個人喜歡,我全部直接用decimal(18,5),小數部分我直接用了5位;

但是對於一個商品來說,我最多隻會用到兩位小數,百分比也只會用到4位,5位的只能是更小的傭金比例計算。

但我覺得這樣算起來的數,小數實在是太小了,既然針對小型電商來說,我覺得只要兩位就足夠了,

所以我引入了一些概念,

1、針對提現金額的手續約不採用標準的四捨五入,保留兩位小數。

2、針對傭金提成的手續約也不採用標準的四捨五入,保留兩位小數。

3、要使用者交錢的四捨五入,只要第三位小數有值,直接往第二位進1,目的就是要使用者多交錢。

3、要商家交錢的四捨五入,不管第三位小數是否有值,都不進1,目的是要商家少交錢。

好了,有了這些基礎後,我直接整個資料庫設計儲存的價格值傭金值都採用保留兩位小數進行儲存,雖然使用decimal(18,5)會有3個多餘的0,這裡我直接用一個方法進行切割,反正是沒值的。

而對於百分比的,直接不變,都是採用五位小數。

下面我提供我換算的方法:

    /// <summary>    /// 四捨五入計算類    /// </summary>    public class Round    {        /// <summary>        /// 標準切割,結果保留兩位小數        /// 不計算四捨五入        /// </summary>        public static decimal Standard(string money)        {            return decimal.Parse((Math.Truncate(double.Parse(money) * 100) / 100.00).ToString("0.00"));        }        /// <summary>        /// 標準四捨五入,結果保留兩位小數        /// </summary>        public static decimal RoundForStandard(string money)        {            return Standard(Math.Round(double.Parse(money), 2, MidpointRounding.AwayFromZero).ToString());        }        /// <summary>        /// 針對使用者的四捨五入,結果保留兩位小數        /// 要使用者交錢的四捨五入,目的就是要使用者多交錢        /// </summary>        public static decimal RoundForUser(string money)        {            if ((double.Parse(money)*100) > ((int) (double.Parse(money)*100))) //看下小數點第三位是否有數            {                //有的時候,直接進1                return Standard((double.Parse(money) + 0.01).ToString());            }            else            {                return Standard(money);            }        }        /// <summary>        /// 針對商家的四捨五入,結果保留兩位小數        /// 要商家交錢的四捨五入,目的是要商家少交錢        /// </summary>        public static decimal RoundForMerchant(string money)        {            return Standard(money);        }        /// <summary>        /// 固定點的轉換,可將小數後面多餘的零去掉        /// 這個不固定保留多少位小數        /// </summary>        public static decimal Fixed(string money)        {            return decimal.Parse(string.Format("{0:G}", money));        }    }

後話,如果我這裡有什麼是錯的,歡迎大家指正。

小型電商系統資料庫中的價格類型設計

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.