whatd 发表于 2019-1-4 18:00

excel时间自动填充误差怎么避免?

就算用round依然有误差,导致无法检索对应数据。
就算用公式等差,五分钟加12次,和直接加一个小时出来的数也不同…导致精确查找函数完全没法用

Elrcat 发表于 2019-1-4 18:15

用时间戳试试?

hamano_taiki 发表于 2019-1-4 22:51

没听懂你在说啥
例子说详细点不行么

-- 来自 有消息提醒的 Stage1官方 Android客户端

whatd 发表于 2019-1-5 01:38

本帖最后由 whatd 于 2019-1-5 02:03 编辑

Elrcat 发表于 2019-1-4 18:15
用时间戳试试?
刚搞懂时间戳,不过这种位数太大的在EXCEL里面都得变成科学计数法....不过倒是提醒我转换成MMDDHHMM形式的文本应该可以避免这样的误差,不过这样就无法直接运算时间了...

不过十几万的数据.... 无论用INDEX还是VLOOKUP匹配都得卡。有啥工具能够让有点EXCEL基础的人快速上手的
果然还是数据库技能必须么....

whatd 发表于 2019-1-5 01:51

本帖最后由 whatd 于 2019-1-5 02:01 编辑

hamano_taiki 发表于 2019-1-4 22:51
没听懂你在说啥
例子说详细点不行么

EXCEL的时间(数据)自动填充(出现的)误差怎么避免?

(自动填充的数据)就是用round(函数进行四舍五入)依然有误差,导致无法(使用精确匹配函数来精确)检索对应的(时间)数据。

就算用公式(自动填充构建)等差(数列),(将)五分钟(作为公差),(对a1作为初始数据)加12次(得到的数据),和直接(将a1)加一个小时出来的数(据)也不同(在小数点后8位左右开始有偏差)...导致(在EXCEL中被认为是两个不相等的数据),(使用)精确查找函数(无法找到对应响应的数据)完全没法用。

(2019-1-1 0:00)+(0:05)*12=43466.0416666666
(2019-1-1 0:00)+(1:00)      =43466.0416666667

Elrcat 发表于 2019-1-5 12:05

whatd 发表于 2019-1-5 01:51
EXCEL的时间(数据)自动填充(出现的)误差怎么避免?

(自动填充的数据)就是用round(函数进行四舍五 ...

计算过程用时间戳,显示和最终结果还是按时间格式呀,你时间格式精确到秒

两个路人 发表于 2019-1-5 14:01

本帖最后由 两个路人 于 2019-1-5 14:07 编辑

Excel 将日期存储为序列号,以便可以在计算中使用它们。默认情况下,1900 年 1 月 1 日是序列号 1,而 2008 年 1 月 1 日,则是序列号 39448。每 24 小时的周期都从午夜零点(0:00:00)开始,存储为0。正午(12:00:00)则存储为 0.5,因为从午夜零点至正午恰好是一个整天的一半。到下一个午夜零点时(0:00:00),Excel把它存储为1。
以上是EXCEL的存储逻辑。日期归整数,时间归小数。我开EXCEL 2007看了一下秒的存储,你至少需要开到小数点后14位才有可能不被round。或者你得用楼上说的那种办法,重新对接一套时间表示法,然后通过自定义运算让excel显示出来。

antiultima 发表于 2019-1-5 14:19

whatd 发表于 2019-1-5 01:51
EXCEL的时间(数据)自动填充(出现的)误差怎么避免?

(自动填充的数据)就是用round(函数进行四舍五 ...

匹配公式不能用round来确定匹配位数吗?
还是round对60进制的舍入支持不行?

antiultima 发表于 2019-1-5 14:28

whatd 发表于 2019-1-5 01:51
EXCEL的时间(数据)自动填充(出现的)误差怎么避免?

(自动填充的数据)就是用round(函数进行四舍五 ...

或者用 TEXT(时间单元格,"yyyy/m/d h:mm:ss.00;@") 来转化成文本之后匹配
转化成文本的过程自动进行舍入,文本格式的最大精度貌似是秒后3位(公式中0的个数)

whatd 发表于 2019-1-5 14:37

antiultima 发表于 2019-1-5 14:19
匹配公式不能用round来确定匹配位数吗?
还是round对60进制的舍入支持不行? ...

不知道,像楼上说的一样吧,我round到8位还是有误差,但是继续缩小位数的话,时间本身就会改变了,所以这大概是EXCLE时间格式的天生缺陷吧。反正我没辙了,要么就时间戳了,不过1970年时间太长了,会变成科学计数法。

目前想到的只能自己定一个时间起点,然后精确到分钟数,然后通过辅助用公式列转换成看得懂的格式,不过这十几万的数据量,用我自己的9900k都能卡成SB,办公室的I3没办法了.....

而且看半天powerquery还是没看懂怎么操作,我还想对两个时间中间的时间进行对应的插值,然后再查询.......

whatd 发表于 2019-1-5 14:40

Elrcat 发表于 2019-1-5 12:05
计算过程用时间戳,显示和最终结果还是按时间格式呀,你时间格式精确到秒 ...

秒数据显示不出来了,也不需要精确到秒,我精确到分钟自己弄个时间体系,powerquery有快速上手的操作教程么,急着对数据要交了....

whatd 发表于 2019-1-5 14:46

antiultima 发表于 2019-1-5 14:28
或者用 TEXT(时间单元格,"yyyy/m/d h:mm:ss.00;@") 来转化成文本之后匹配
转化成文本的过程自动进行舍入 ...

这个问题暂时没问题了,现在的问题是,十几万的数据量太大,查找匹配在低配置直接卡死,正在找点别的上手容易的类数据库工具。

win8 发表于 2019-1-5 16:35

不要用等于,用数值差的绝对值小于多少来判定

whatd 发表于 2019-1-6 10:41

win8 发表于 2019-1-5 16:35
不要用等于,用数值差的绝对值小于多少来判定

EXCEL里哪个函数能这样查找?

hamano_taiki 发表于 2019-1-8 16:08

whatd 发表于 2019-1-5 01:51
EXCEL的时间(数据)自动填充(出现的)误差怎么避免?

(自动填充的数据)就是用round(函数进行四舍五 ...

这个是浮点数精度不够的问题
EXCEL下尝试用时间戳解决问题
不然可以尝试一下用annaconda搭配pandas的period来建立时间索引
可以规避EXCEL的日期时间是用浮点数存储的问题

michaelz 发表于 2019-1-8 16:26

whatd 发表于 2019-1-6 10:41
EXCEL里哪个函数能这样查找?

abs(time1-time2)<0.0000001来代替 time1=time2这样吧

ArtoriaPendrago 发表于 2019-1-8 16:36

whatd 发表于 2019-1-8 21:21

hamano_taiki 发表于 2019-1-8 16:08
这个是浮点数精度不够的问题
EXCEL下尝试用时间戳解决问题
不然可以尝试一下用annaconda搭配pandas的peri ...

我觉得我得先去学个数据库和PYTHON.....

不是码工,但是老这样处理数据也是烦。

hamano_taiki 发表于 2019-1-9 09:29

whatd 发表于 2019-01-08 21:21:44
我觉得我得先去学个数据库和PYTHON.....

不是码工,但是老这样处理数据也是烦。 ...pandas可以直接读写Excel文件
就照着案例学一点读写Excel
以及建立时间序列的操作即可
过程就是
读Excel
给数据表增加时间序列作为索引
写回Excel
其他都不用深究
一般Excel技术能懂点index之类函数的水平
学这些内容就算加上学一丁点Python基础
也不过两三天吧
网上可能还有些手把手教程的

-- 来自 能搜索的 Stage1官方 Android客户端
页: [1]
查看完整版本: excel时间自动填充误差怎么避免?