Bash Math Oddity(浮点分部)

时间:2018-05-03 23:59:17

标签: bash math bc expr

所以我在这里遇到了bash / bc数学的麻烦..

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

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

所以在我的打印代码中,我尝试将其除以1048576以使其成为mb。哪个应该给我1.9 mb。

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

打印1

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

计算应为1993211 / 1048576 = 1.90087413788

有什么想法在这里发生?

2 个答案:

答案 0 :(得分:2)

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

bc -l <<< '1993211 / 1048576'

返回:1.90087413787841796875

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

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

返回:1.90087

答案 1 :(得分:2)

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

你想要的是传递表达式&#34; 1993211/1048576&#34;直接作为bc -l的输入:

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