金额、重量、成绩等数据库字段推荐使用int或bigint类型。

通常我们数据库设计中金额,重量等涉及到小数位的字段会用float或decimal,mysql还可以用double,但往往每笔金额的计算我们只需要精确到分,重量精确到克,最佳的设计是用int型来代替浮点型,如果涉及到的数字比较大,超过int型的取值范围(-2,147,483,648~2,147,483,647),最大金额为21474836.47,即两千多万,或者2147483.647公斤,哪么我们可以用bigint,c#中使用long类型(9,223,372,036,854,775,808~9,223,372,036,854,775,807),最大金额92233720368547758.07,亿亿级,国家财政收入也就万亿,所以一般足够用了,如果都是正数,还可以用ulong,设想一下,如果超过ulong型该怎么处理,大家可以思考一下?

使用int型来代替浮点数的好处是计算速度上int型要快很多,居于快多少与数量级有关,但以现在的计算机计算能力,一般系统大可忽略这个影响;使用int最大的好处是解决计算精度的问题,在涉及N条记录合计取整时浮点数会有偏差,在数据加减处理上也比较麻烦,举个例子:某个客户账户数据库余额123.2301元,我们在界面显示的时候只需要显示123.23元,如果客户消费123.23元,实际余额为0,但数据库中还有0.0001元,这样我们需要在代码中处理这多余的0.0001元,有些人会说写入时就把精度四舍五入处理好,但依然会涉及到精度处理以及与合计金额的偏差处理(多条记录四舍五入后与实际合计金额会有偏差),如果使用int型代替浮点型,输入时我们只要做一个格式化处理就可以。

关于金额,重量等浮点数的数据库字段设计(用Int,Long代替浮点数计算)的更多相关文章

  1. mysql数据库设计文档-导出字段设计

    navicat 是我一直在使用的一个数据库操作工具,非常方便快捷.如果没有可用navicat可以留言邮箱我直接发您. 今天来介绍一下使用navicat导出数据库字段设计.废话不多说,先看导出效果. 查 ...

  2. MySQL数据库一般设计规则

    一.数据库设计 规则一之存储规则: 一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎. 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所 ...

  3. Django数据模型——数据库字段类型

    字段 一个模型最重要也是唯一必需的部分,是它定义的数据库字段 字段名称限制 1.字段名不能是python保留字,这样会导致python语法错误 2.字段不能包含连续一个以上的下划线,这样会和Djang ...

  4. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  5. ORACLE常用数据库字段类型

    ORACLE常用数据库字段类型   常用的数据库字段类型如下:   字段类型 中文说明 限制条件 其它说明  CHAR 固定长度字符串 最大长度2000 bytes     VARCHAR2 可变长度 ...

  6. SQL Server数据库字段类型说明

    SQL Server数据库字段类型说明 目前Sql Server 数据库一共有X个字段类型,大体分为9类,分别是字符串类型.二进制码字符串数据类型.Unincode字符串数据.整数类型.精确数据类型. ...

  7. Oracle开发:常用的数据库字段类型[转]

    Oracle常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度的字符串 最大长度4000 bytes ...

  8. Oracle数据库字段保留3位小数,程序读出来显示4位小数

    需求 项目需求从字段2位小数,改成3位小数,这事儿好办,数据库噼里啪啦敲了一行代码,发现居然报错,原因是不能修改字段精度问题,然后使用了冒泡排序,搞定 --新增临时字段 ,); --将原字段内容拷贝至 ...

  9. 设计数据库字段或者java中使用boolean型时需谨慎

    boolean型变量只有两个值 false和true,我们在设计数据库字段时或者定义java变量时会使用boolean,通常情况下开关类的变量使用无可非议,但请一定要考虑到扩展性. 使用前请仔细考虑一 ...

随机推荐

  1. Xcode如何简单安装Alcatraz

    1.最简单直接,直接到github获取该项目 地址:www.github.com,搜索Alcatraz: 2.通过Xcode打开该项目,编译success后,退出Xcode,再启动,再弹出框选择loa ...

  2. C#入门经典(第五章-1)

  3. offsetXXX和scollXXX的一些操作

    <!doctype html><html><head><meta charset="utf-8"><title>offs ...

  4. easyui tree使用方法

    加载数据 $('#treeul').tree({ checkbox:true, url:'initTree.aspx', onLoadSuccess:function(){ //绑定权限 $.ajax ...

  5. SPFA中 正逆邻接表的建立

    正邻接表的建立: 先定义一个结构体: struct node { int r,v,w,next; }Map[]; 每输入一组数据 就通过Add函数加入到邻接表中,上图已经说得很明白了,结合着下面的代码 ...

  6. 虚拟机安装tools for Ubuntu

    1.启动虚拟机,进入虚拟机 2.选定菜单中的虚拟机按钮,点击安装VMware Tools 3.此时虚拟机上会弹出一些文件,   复制VMwareTools-XXX-XX.tar.gz到桌面,鼠标右键可 ...

  7. Flocker 做为后端存储代理 docker volume-driver 支持

    docker Flocker https://github.com/ClusterHQ/flocker/ 文档: https://docs.clusterhq.com/en/latest/docker ...

  8. rm link

    # this works rm foo # versus rm foo/

  9. Android开发学习资源

    https://developer.android.google.cn/training/index.html

  10. java中堆和堆栈的区别

    java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...