Bash 数学奇数(浮点除法)

Bash Math Oddity (Floating Point Division)

所以我在 bash / bc 数学方面遇到了一些麻烦..

在通过 rclone 将备份移动到我的 gdrive 进行备份后,我正在尝试打印备份的文件大小。因此,我通过带有 awk print $1 的 rclone ls 语句获取文件大小,效果很好。

在我的具体例子中,我得到的值是1993211(字节)。

因此在我的打印代码中,我尝试将其除以 1048576 以将其转换为 mb。哪个应该给我 1.9 mb。

但是, $ expr 1993211 / 1048576 | bc -l

打印1

我已经尝试了 here 列出的各种其他数学选项(包括通过 python / 节点),我总是得到 1 或 1.0。这怎么可能?

计算应该是1993211 / 1048576 = 1.90087413788

知道这里发生了什么吗?

那是因为它做整数除法。 得到浮点除法你可以 运行:

bc -l <<< '1993211 / 1048576'

其中returns:1.90087413787841796875

或者您可以使用比例设置小数位数:

bc -l <<< 'scale=5; 1993211 / 1048576'

其中 returns: 1.90087

在命令 expr 1993211 / 1048576 | bc -l 中,expr 使用整数除法将 1993211 除以 1048576(因为 expr 知道该怎么做),结果为“1”,并打印出来。 bc -l 接收“1”作为输入,并且由于没有指定操作(expr 已经这样做了),它只是打印它。

你想要的是将表达式“1993211 / 1048576”作为输入直接传递给 bc -l:

$ echo "1993211 / 1048576" | bc -l
1.90087413787841796875