数据库和代码程序间的数据类型选择
来源:互联网 发布:python socket通信框架 编辑:程序博客网 时间:2024/06/01 16:56
今天在看自己项目组数据的时候,在sql server数据库里有一个保存Site(站点)信息的表,其中有Latitude(纬度)
和Longitude(经度)这两个字段,发现类型为float。 大家都知道sql的float(8字节)和real(4字节,=float(24)
类型都是表示数据的近似值,我想如果程序代码中若有判断地图范围或按地图范围来查Site时,必然用到Latitude和
Longitude的大小比较,那这样肯定就会做出不精确的判断了。
于是立即去查代码,果然,就有这样的 >= 和 <= 的判断; 并且更可恨的是,所有这些site的点都是要显示到BingMap
上去的,我想拿一个近似值去显示一个错误的点,这是大家都不想要的结果。
好吧,去找DBA。DBA解释到,这个只要确保在存的这些数据小数点尾数全部一致位,这里为后6,然后我们在代码中
也可以只保留小数点后六位,需求上也是能容许地图显示的小误差的。自然,有点道理。
不过他后来问我代码里接受的Latitude和Longitude参数是用什么类型来表示的,我这才想起是用的double,并且有两点
之间距离的计算。 这完全是糟糕的设计啊! 数据库的float型取出之后赋给double,会在后面多出几位,本身数值也有
1. 数据库里Lat/Lon类型改成int。也就是原来的float的值乘以1e6。
2. 代码的数据类型也改成int,等真正用时除以1e6即可!
结论
1. 数据库和代码里的类型尽量用int,尤其是涉及到数值运算的。
2. 数据库取出的数据应尽量保持其本性,到真正用时才做转换,也就是:只做一次近似运算!
和Longitude(经度)这两个字段,发现类型为float。 大家都知道sql的float(8字节)和real(4字节,=float(24)
类型都是表示数据的近似值,我想如果程序代码中若有判断地图范围或按地图范围来查Site时,必然用到Latitude和
Longitude的大小比较,那这样肯定就会做出不精确的判断了。
于是立即去查代码,果然,就有这样的 >= 和 <= 的判断; 并且更可恨的是,所有这些site的点都是要显示到BingMap
上去的,我想拿一个近似值去显示一个错误的点,这是大家都不想要的结果。
好吧,去找DBA。DBA解释到,这个只要确保在存的这些数据小数点尾数全部一致位,这里为后6,然后我们在代码中
也可以只保留小数点后六位,需求上也是能容许地图显示的小误差的。自然,有点道理。
不过他后来问我代码里接受的Latitude和Longitude参数是用什么类型来表示的,我这才想起是用的double,并且有两点
之间距离的计算。 这完全是糟糕的设计啊! 数据库的float型取出之后赋给double,会在后面多出几位,本身数值也有
出入,还要用来计算球面距离,那准确度就大打折扣了。并且double类型计算效率很低。
1. 数据库里Lat/Lon类型改成int。也就是原来的float的值乘以1e6。
2. 代码的数据类型也改成int,等真正用时除以1e6即可!
结论
1. 数据库和代码里的类型尽量用int,尤其是涉及到数值运算的。
2. 数据库取出的数据应尽量保持其本性,到真正用时才做转换,也就是:只做一次近似运算!
- 数据库和代码程序间的数据类型选择
- 数据库选择合适的数据类型
- 设计数据库时数据类型的选择技巧
- mysql数据库优化--选择合适的数据类型
- int和long 的数据类型的选择
- 架构优化和索引--数据类型的选择
- 数据库的数据类型和数据表
- android 程序中选择图片的代码
- Oracle数据库timestamp选择时间间隔大于30分的记录 和 INTERVAL DAY TO SECOND数据类型详解
- mysql 数据类型的选择
- 选择优化的数据类型
- 选择优化的数据类型
- 选择优化的数据类型
- 选择合适的数据类型
- 选择正确的数据类型
- 选择合适的数据类型
- 让程序分别在DEBUG模式和RELEASE模式选择不同代码路径的方法 _DEBUG
- 数据库中的数据类型和c#的数据类型的映射表
- webkit的js对象扩展(二)——binding方式创建自定义对象(多实例)
- C语言编译流程
- 基于WebKit浏览器的本地扩展方法
- JDBC 连接字符串大全
- three.js 绕其边缘旋转
- 数据库和代码程序间的数据类型选择
- PyMongo小总结
- webkit idl 资料
- 标准输出流函数
- Android修改系统时间 & apk获取系统权限
- W3C Web IDL
- string, wstring 转换, _wtol等
- 《水墨青花》----徐志摩
- what is the WIFI protocols set?