【问题标题】:Bash Math Oddity (Floating Point Division)Bash 数学奇数(浮点除法)
【发布时间】:2018-05-03 23:59:17
【问题描述】:

所以我在这里遇到了一些 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

知道这里发生了什么吗?

【问题讨论】:

标签: bash math bc expr


【解决方案1】:

那是因为它进行整数除法。 一定要获得可以运行的浮点除法:

bc -l <<< '1993211 / 1048576'

返回:1.90087413787841796875

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

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

返回:1.90087

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多