0

所以我在这里遇到了 bash / bc 数学问题。

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

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

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

然而, $ expr 1993211 / 1048576 | bc -l

印刷1

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

计算应该是1993211 / 1048576 = 1.90087413788

知道这里发生了什么吗?

4

2 回答 2

2

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

bc -l <<< '1993211 / 1048576'

返回:1.90087413787841796875

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

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

返回:1.90087

于 2018-05-04T00:31:27.123 回答
2

在命令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
于 2018-05-04T00:48:28.040 回答