精易论坛

标题: 精易模块 时间_取现行时间戳 [打印本页]

作者: RunAway    时间: 2023-1-24 23:13
标题: 精易模块 时间_取现行时间戳
本帖最后由 RunAway 于 2023-1-24 23:13 编辑

模块版本:10.4.5
所用系统:win11
命令名称:时间_取现行时间戳
BUG描述:返回错误的浮点数文本

@项目部004

说起来其实多年前就遇到过这个bug,当时我用来做时间判断的
用的 到长整数(时间_取现行时间戳(假)) 对比之前记录值 来判断时间经过了多少毫秒
结果总是触发一个奇怪的bug 就是新时间戳的值居然比旧时间戳的值要小 导致报错各种问题
当时没找到原因 就没想那么多 直接简单粗暴直接*1000完事

而今天敲代码又出现了这个bug 调试了好久也没找到问题所在 一编译出来就报错。。

简单的写了个测试代码 终于找出了问题所在,以下是测试代码


这个bug本来就是个小问题,坑就坑在 调试的时候根本就不会出问题 直接用易语言编译和静态编译也不会,只要一用黑月编译立马就出问题

正好之前看过一篇文章说浮点数精度丢失问题 这个值一看就是典中典

翻开精易模块源码 一眼就看出了问题所在 就是这个取时间间隔的双精度浮点数转换的时候 变成了 1674524806.000001 解决办法到文本之前先到长整数即可


修改之后再次编译运行,问题完美解决

以下是修复版本的代码   (仅修复原本代码中的bug。模块里其实有更好的取时间戳命令比如 时间_取现行时间戳1() )

  
子程序名返回值类型公开备 注
时间_取现行时间戳文本型 生成一个13位或者10位的现行时间戳,默认生成13位时间戳。13位:1325252169718,10位:1325252169
参数名类 型参考可空数组备 注
是否取十位时间戳逻辑型本参数为真时,将生成10位时间戳返回
变量名类 型静态数组备 注
时间b精易_时间 
返回值文本型 
毫秒数文本型 
时间a文本型 
GetLocalTime (时间b)
毫秒数 = 取重复文本 (3 - 取文本长度 (到文本 (时间b.毫)), “0”)到文本 (时间b.毫)
时间a = 到文本 (到长整数 (取时间间隔 (取现行时间 (), 到时间 (“1970-01-01 08:00:00”), #秒 )))
返回值 = 时间a + 毫秒数
判断 (是否取十位时间戳)
返回值 = 取文本左边 (返回值, 10)
判断循环首 (取文本长度 (返回值) < 10)
返回值 = 返回值 + “0”
判断循环尾 ()
返回 (返回值)
判断循环首 (取文本长度 (返回值) < 13)
返回值 = 返回值 + “0”
判断循环尾 ()
返回 (返回值)




作者: 陽陽陽    时间: 2023-1-24 23:53
大佬啊
作者: 易智趣吖    时间: 2023-1-25 11:05
楼上的哪儿都有你
作者: 项目部004    时间: 2023-1-29 11:33

时间_取现行时间戳1
作者: RunAway    时间: 2023-2-1 14:45
更新下后续情况吧,实际上取时间间隔返回值带小数点是黑月的bug。
之前一直用的论坛里发布的黑月3.7.7.4。
现在加了黑月群之后下载了测试版的黑月4.1.7.7 已经修复了,目前测试问题不会再出现了。
作者: ArchiverX3    时间: 2023-3-16 09:43
可惜 这里表明 还是未能修复全部BUG https://125.confly.eu.org/forum.php?mod=viewthread&tid=14766509




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4