前言

本文主要给大家介绍了MySQL中在将浮点型转字符型的时候遇到的一个问题,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
一 问题描述
今天遇到一个刷数据的需求,是修改产品的重量(字段类型为float),修改了产品的重量之后,是需要记录到日志表中的(字段类型为varchar),表结构如下:
临时刷数据表:
CREATE TABLE `temp_170830` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `goods_sn` varchar(255) NOT NULL DEFAULT '' COMMENT '产品编码', `goods_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '产品重量', `actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '实际重量', `new_actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '新的实际重量', `create_user` varchar(30) NOT NULL DEFAULT '' COMMENT '创建人', PRIMARY KEY (`id`), KEY `idx_goods_sn` (`goods_sn`) ) ENGINE=InnoDB AUTO_INCREMENT=8192 DEFAULT CHARSET=utf8 COMMENT='临时刷重量表';
日志表:
CREATE TABLE `log_weight` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `goods_sn` varchar(50) NOT NULL DEFAULT '' COMMENT '产品编码', `which_col` varchar(100) NOT NULL DEFAULT '' COMMENT '修改字段', `old_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT '更新前值', `new_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT '更新后值', `update_user` varchar(100) NOT NULL DEFAULT '' COMMENT '创建人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `wh_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间', PRIMARY KEY (`id`), KEY `idx_goods_sn` (`goods_sn`), KEY `idx_update_user` (`update_user`), KEY `wh_update_time` (`wh_update_time`) ) ENGINE=InnoDB AUTO_INCREMENT=14601620 DEFAULT CHARSET=utf8 COMMENT='重量修改日志';
如上面建的表所示,我需要将temp_170830表的actual_weight和new_actual_weight字段分别刷入log_weight表的old_value和new_value字段,SQL语句如下:
INSERT INTO log_weight(goods_sn, which_col, old_value, new_value, update_user) SELECT goods_sn,'actual_weight',actual_weight,new_actual_weight,create_user FROM temp_170830;
本来以为到这里就已经大功告成了,毕竟只是插入一些日志记录,后来为了简单的进行核对,发现数据有些不对劲,如下图所示:
临时表数据截图:
日志表数据截图:
对比可以发现,插入的日志记录数据无缘无故后面多了很多位的小数,不知道从哪里冒出来的,后来一想,可能是本来浮点型的数据就是除不尽的,转成varchar的时候就把后面的那些也给带出来了,暂时也不是很确定,后续确定之后再补充,然后自己临时找了一个转varchar的方法concat,调整如下:
INSERT INTO log_weight(goods_sn, which_col, old_value, new_value, update_user) SELECT goods_sn,'actual_weight',concat(actual_weight,''),concat(new_actual_weight,''),create_user FROM temp_170830;
顺利解决日志记录问题。
总结如下:
1 在记录价格和重量数字字段的时候,尽量不要使用浮点型!!!,浮点数坑多(比如浮点型是不能判断相等的!!!),最好是采用int整型,业务上要显示小数时,读取出来再除以相应的位数,比如99.98元,应存储9998,读取出来时,用9998/100来显示。
2 在float转varchar时,应该先把float用concat函数先转成varchar,再存储入varchar字段。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
# mysql
# 字符串转浮点型
# 字符串转浮点
# 浮点型转换成字符串
# 浮点
# 所示
# 转成
# 主键
# 来了
# 好了
# 说了
# 不多
# 不是很
# 有一定
# 就把
# 给大家
# 大功告成
# 找了
# 一个问题
# 这篇文章
# 无缘无故
# 谢谢大家
# 先把
# 也给
相关文章:
如何快速查询网址的建站时间与历史轨迹?
教学论文网站制作软件有哪些,写论文用什么软件
?
建站之星导航菜单设置与功能模块配置全攻略
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何解决ASP生成WAP建站中文乱码问题?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
中山网站制作网页,中山新生登记系统登记流程?
如何在建站宝盒中设置产品搜索功能?
如何快速生成高效建站系统源代码?
C#怎么使用委托和事件 C# delegate与event编程方法
如何在IIS7中新建站点?详细步骤解析
建站与域名管理如何高效结合?
C++如何编写函数模板?(泛型编程入门)
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
音乐网站服务器如何优化API响应速度?
免费网站制作appp,免费制作app哪个平台好?
网站制作网站,深圳做网站哪家比较好?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
网站制作企业,网站的banner和导航栏是指什么?
小型网站建站如何选择虚拟主机?
如何用IIS7快速搭建并优化网站站点?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
深圳网站制作的公司有哪些,dido官方网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
如何在IIS中配置站点IP、端口及主机头?
南京网站制作费用,南京远驱官方网站?
如何选择靠谱的建站公司加盟品牌?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
建站之星下载版如何获取与安装?
建站主机是否等同于虚拟主机?
如何通过虚拟主机快速搭建个人网站?
如何用y主机助手快速搭建网站?
如何快速搭建安全的FTP站点?
高性价比服务器租赁——企业级配置与24小时运维服务
建站10G流量真的够用吗?如何应对访问高峰?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何挑选优质建站一级代理提升网站排名?
宝塔建站后网页无法访问如何解决?
浅析上传头像示例及其注意事项
如何选择PHP开源工具快速搭建网站?
Swift中swift中的switch 语句
高端云建站费用究竟需要多少预算?
高防服务器租用如何选择配置与防御等级?
如何批量查询域名的建站时间记录?
如何用西部建站助手快速创建专业网站?
如何在阿里云通过域名搭建网站?
建站之星Pro快速搭建教程:模板选择与功能配置指南
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
*请认真填写需求信息,我们会在24小时内与您取得联系。