从EXCEL导入数据库数值型都被四舍五入了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从EXCEL导入数据库数值型都被四舍五入了相关的知识,希望对你有一定的参考价值。
实现EXCEL数据导入数据库(mysql)的过程中,发现EXCEL数值类型的字符到数据库中最后两位就会被四舍五入,例如200862到数据库里就会变成200860,我数据库该字段类型设的为VARCHAR,如果设成别的类型也不对,比如用浮点型,数据库里存的就和EXCEL里文本类型一样了。。。我在存入的函数里没有加入四舍五入转换,所以肯定问题出在格式上,求解
多看看你写的程序吧!
这种问题我不想回答来着,百度里弄不成精彩回复。
--------------
给你做一个实验。
假如excel 使用的是标准xml 驻存。
基本上类似于如下结构
<H30_Value>4.011<H30_Value/>
<H30_Handle>Round(2)<H30_Handle/>
<H30_ViewValue>4.00<H30_ViewValu/>
也就是说,你获得的值不是视觉值就是,实际存储值。
你的程序并没有统一处理,一些API,getCellValue,和 Value 差距可是相当的大。
mysql 写的导入插件用的是实际存储值。
我建立一个表,三个列 A int B float C varchar
然后我用甲骨文开发的插件提交一下数据:
一共三行 三种格式。 自己多看看 fx 的那个显示 是什么值
也就是说 造成这种视觉和实际的元凶是handle,你用最简单的模板试一下,我个人认为你的那个程序有问题的概率比excel格式出问题的概率大一些。
mysql 文本 如果是数字 也可运算,这是一个优点。也是一个缺点。
追问我数值型没有保留小数点,故输入值和显示值是一样的,我程序里没用Round函数,出现了最后两位四舍五入的这情况,应该没这么神奇吧
追答所以让你优先排查你的程序。 你也可以用mysql for excel这个插件 ,提交一下你的excel。
试一下就知道问题出在哪里了。
以前开发程序的时候倒是有这种情况,200862到数据库里就会变成200860 基本不可能,可能是你举的例子根本就是你的假设。
但是在长数据的时候会产生这样的情况。
比如56656565665656566666 在excel 中 常规 数字 都会变成 56656565665656560000
当时解决是采用 先设置文本,或采用 '56656565665656566666 加个上撇 存储。
是csv文件,不要用excel 打开,不然大数据都会被编零。
我保留小数点后几位也是这样,数据库内格式用什么好呢。。。
参考技术B 数据库中 VARCHAR 类型是字符串类型。追问我就是在问为啥数值型存字符串就会出现后两位四舍五入的情况呢?~数据库内应该对应哪种格式才正确显示
参考技术C 既然数据库上VARCHARexcel对应列 应该设为文本型追问
数字作为文本处理会存成6.93155E+12这样的
参考技术D 我在批量处理数据库内容的时候,也遇到这种问题。我一般会直接导出CSV文件,让后用TXT进行内容替换。excel中以文本格式储存的数字转换成数字后,小数点后的数字消失了,数值自动四舍五入为整数?
以文本格式储存的数字转换成数字后,小数点后的数字不会消失,和原来的数字一样,只是格式变了。你再右键点击数字——设置单元格格式,设置小数位数,看是否小数点后的数字会出来。 参考技术A 转换为数字后小数点后的数字消失,是因为设置单元格格式时,设置为数值型,小数位数为0,如果小数位数不设则自动保留所有小数位。 参考技术B 你的数字文本太长了,位数太多,超过了EXCEL所能正确表达的极限
EXCEL会自动以科学计数法表达
但这样一来,个位、十位、百位等的信息已经丢弃,无法还原 参考技术C 选中数据区域,右击,“设置单元格格式”,选择“常规”。
以上是关于从EXCEL导入数据库数值型都被四舍五入了的主要内容,如果未能解决你的问题,请参考以下文章