小编The*_*ith的帖子

日期命令和算术的精度

我以纳秒精度获取日期:

$ start=$(date '+%s.%N')
Run Code Online (Sandbox Code Playgroud)

...然后打印它:

$ echo ${start}
1662664850.030126174
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。但是看看当我以任意大的精度 printf 时得到的结果:

1662664850.0301261739805340766906738281250000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

Q1. date 命令实际上是否用那么多信息填充了 start 变量,或者这些数字只是垃圾?

这是问题的第二部分。假设我想做一些时间数学。创建一个“结束”时间戳:

$ end=$(date '+%s.%N')
$ echo ${end}
1662665413.471669572
$ printf "%.55f\n" ${end}
1662665413.4716695720562711358070373535156250000000000000000000000
Run Code Online (Sandbox Code Playgroud)

现在我使用 bc 得到了我期望的结果:

$ echo $(bc <<< ${end}-${start})
563.441543398
Run Code Online (Sandbox Code Playgroud)

但看看我使用 python 或 perl 时得到的结果:

$ echo $(python -c "print(${end} - ${start})")
563.441543579
$ echo $(perl -e "print(${end} - ${start})")
563.441543579102
Run Code Online (Sandbox Code Playgroud)

在某个时刻,这个数字会脱离轨道:

BC 563.441543 398   
python 563.441543 579   
perl 563.441543 579 102  

Q2。这些数字有所不同,但由于四舍五入而导致的结果与您预期的不同。是什么赋予了?

系统信息:
Linux 3.10.0-1160.71.1.el7.x86_64 #1 SMP 2022 年 …

linux date arithmetic

4
推荐指数
3
解决办法
1456
查看次数

标签 统计

arithmetic ×1

date ×1

linux ×1