从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 打开,不然大数据都会被编零。

参考技术A 这是单元格格式的问题,你在你输入的数据上按右键,选择单元格格式,选数值,保留几位小数,你自己选择,因为之前你选择的是零位,所以四舍五入了追问

我保留小数点后几位也是这样,数据库内格式用什么好呢。。。

参考技术B 数据库中 VARCHAR 类型是字符串类型。追问

我就是在问为啥数值型存字符串就会出现后两位四舍五入的情况呢?~数据库内应该对应哪种格式才正确显示

参考技术C 既然数据库上VARCHAR

excel对应列 应该设为文本型追问

数字作为文本处理会存成6.93155E+12这样的

参考技术D 我在批量处理数据库内容的时候,也遇到这种问题。我一般会直接导出CSV文件,让后用TXT进行内容替换。

excel中以文本格式储存的数字转换成数字后,小数点后的数字消失了,数值自动四舍五入为整数?

以文本格式储存的数字转换成数字后,小数点后的数字不会消失,和原来的数字一样,只是格式变了。
你再右键点击数字——设置单元格格式,设置小数位数,看是否小数点后的数字会出来。
参考技术A 转换为数字后小数点后的数字消失,是因为设置单元格格式时,设置为数值型,小数位数为0,如果小数位数不设则自动保留所有小数位。 参考技术B 你的数字文本太长了,位数太多,超过了EXCEL所能正确表达的极限
EXCEL会自动以科学计数法表达
但这样一来,个位、十位、百位等的信息已经丢弃,无法还原
参考技术C 选中数据区域,右击,“设置单元格格式”,选择“常规”。

以上是关于从EXCEL导入数据库数值型都被四舍五入了的主要内容,如果未能解决你的问题,请参考以下文章

从excel导入数据库的数据变成科学计数法怎么办 急!!!

excel导入spss后给变量赋值

向SAP导入EXCEL表报金额为空,这个错怎么找啊

excel怎么把小数点后保留两位怎么操作?

从零开始实现放置游戏——实现挂机战斗导入Excel数值配置

mysql phpmyadmin 导入 csv 禁用舍入