小型电商系统数据库中的价格类型设计

今天分享一个小型电商系统的数据库价格字段的数据类型设计。附上通用四舍五入转换方法

我们知道,价格字段使用的类型,最佳的有两个,分别为: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));
        }
    }

后话,如果我这里有什么是错的,欢迎大家指正。

时间: 2024-10-12 13:30:12

小型电商系统数据库中的价格类型设计的相关文章

互联网电商系统数据库分库本表带来问题

随着互联网电商系统订单量爆发式增长,原有一个库一个订单表无法满足公司业务,需要重新考虑记录订单数据问题. 现在公司订单数据情况: 前端一套订单库放在IDC机房(通过VPN连接到公司局域网服务器) 后端两套订单库(放在公司机房),一套是写的库,一套是只读数据库,两套库以写的库为主库进行同步到从库只读库 现有订单库包含:订单及订单相关的表:优惠券表,促销表,商品表,地区等基础数据表,财务表,仓库系统表,运输物流系统,表用户系统表 1.简单办法:初步讨论需要对订单历史数据进行归档 2.最终办法:实现订

中小型电商系统商品属性设计与实现

这两年做过不少的小型电商系统,有的卖衣服,有的卖鞋子,有的卖电器,甚至还有些卖虚拟服务的.不同商品的属性千差万别,为了减少以后卖xxx的电商系统的工作量,特将属性系统做成通用版的. 设计思路如下: 1.可自定义的无限级商品类别. 2.各类别可自定义属性,属性的类型有:普通文本.数字.价格.单项选择.多项选择.日期.文本域.富文本.图片.布尔值等,添加商品时自动加载所需的组件. 3.支持公共属性. 4.支持属性继承,即子类别自动继承父类别的属性,并支持覆盖父类别同名属性. 5.支持属性值验证,添加

“大型票务系统”和“实物电商系统”的数据库选型

讨论请移步至:http://www.zhiliaotech.com/ideajam/idea/detail/423 相关文章: <今天你买到票了吗?--从铁道部12306.cn站点漫谈电子商务站点的"海量事务快速处理"系统> 不能简单套用"实物电商系统"对"大型票务系统"做需求分析 "大型票务系统"和"实物电商系统"在不能提供商品(服务)时给消费者带来的影响有巨大差异 "大型票务系统&

电商系统中的商品模型的分析与设计&mdash;续

前言     在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介绍. 从SPU.SKU开始     首先我们需要澄清上篇中的这两个概念,在上篇文章中"货品"是指一种概念物品,这种物品并不是一个具体的实物,当它具备具体的属性.价格时,才是一种实物,也就是商品."商品"就是库存中一个具体的实物.例如:iphone6,就是一种货品,但用户

电商系统中的商品模型的分析与设计

前言 在电商系统中,商品模型至关重要,是整个电商的核心,下面通过一个简单的分析,设计一个基础的商品模型. 商品模型的演化 在以前,那时CMS很流行,最常见的模型是栏目-文章模型.于是做电商的时候,自然就继承了这种一对多的关系.只是栏目变成了分类,文章变成了商品.商品也具备了独特的业务属性.现在很多电商网站上左侧的菜单,也就是这个分类. 后来我们慢慢发现一个问题,只有分类并不能适应所有的需求,比如nike鞋和nikeT恤,用户可能希望先看nike的所有商品,这个模型就不能满足.我们想在这个关系中,

幂等和高并发在电商系统中的使用

在Java web项目开发中,经常会听到在做订单系统中生成订单的时候,要做幂等性控制和并发控制,特对此部分内容作出总结,在高并发场景下,代码层面需要实现并发控制:但是幂等性,其实更多的是系统的接口对外的一种承诺,承诺一次请求和多次请求会返回同样的数据.关于幂等性将分别从高等代数中的幂等性.HTTP中的幂等性和订单生成系统中的幂等性阐述:并发性控制则提供了分布式锁等方式来对并发场景进行代码实现. 一.幂等性 idempotence  ['a?d?mpo?t?ns] 1.高等代数中关于幂等idemp

小型电商服务器平台搭建(一)

一.阿里云小型电商服务平台架构介绍 电商平台初创之初,访问量不大,但将来可能访问量暴增,初期阶段业务模式调整频繁,对价格敏感,因此希望服务器平台架构具有良好的功能拓展性及性能伸缩性,所有平台软件最好免费,且性能满足将来发展,具有冗余高可用设计,平台价格要具有很高的性价比,所以,能满足这个需要的就只能是云平台+SLB(负载均衡)+Nginx(反向代理)+Tomcat(JAVA运行环境)+MySQL(数据库)+NAS(网络附属存储).为什么不选物理服务器呢?因为如果选择物理服务器需要租用IDC机房,

电商系统架构——系统鸟瞰图

在看到图(一)这样的图,我们是否有一种探究系统的冲动?这样一个花花绿绿的界面,背后隐藏着什么样的奥秘!用户输入某个域名的时候,比如www.taobao.com的时候,页面是如何展示的,用户在搜索框搜宝贝的时候,系统又是如何处理的,用户在参加秒杀活动的时候,系统又是如何处理的.经过两年多的互联网从业经验,以及自己的思考,在这里我就抛砖引玉对电商系统架构进行探究,探究系统是如何设计的,以及设计这个系统的各种权衡. 图(一) 隐藏在花花绿绿的界面之后,是一个庞大复杂的系统,图(二)是这个系统的鸟瞰图.

优秀的开源电商系统有哪些

信息技术的迅速发展,商家想在众多的电商系统中选择一款合适的并不是那么轻易的事情,那么为了能够让商家在选择上减少时间,小编为你介绍几款好的开源电商系统. ECSHOP电商系统 基于PHP语言及MYSQL数据库构架开发的跨平台开源电商系统,因其强大功能拥有着大批粉丝.ECSHOP开源的电商系统最大的特色之一是功能健全,有着较为全面的商品管理.订单处理.会员管理等功能,其操作简易性更是成为国内多数从事电商行业的企业或个人的首选.ECSHOP是我国较为经典的一款老牌开源电子商务系统. MAGENTO电商