You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash浮点除法异常求助:文件大小转换计算结果不符预期

解决bash中用bc计算字节转MB只得到整数结果的问题

你遇到的这个问题其实是因为expr本身只支持整数除法,你把expr的计算结果传给bc的时候,expr已经把1993211 / 1048576直接算出整数1了,所以bc拿到的只有1,自然出不了你想要的浮点结果。

正确的做法:

直接让bc来完成整个计算,别用expr插一脚,这样就能得到精确的小数结果了:

echo "1993211 / 1048576" | bc -l

跑这个命令的话,你会得到类似1.90099334716796875000的输出,和你预期的1.9MB一致。

其他更便捷的方案:

如果你是要处理rclone ls返回的文件大小,其实可以直接用awk一步搞定,awk本身支持浮点运算:

rclone ls your_remote:your_backup_path | awk '{print $1 / 1048576}'

这样从获取文件大小到转换为MB一次完成,不用额外调用bc。

要是你还是想用bc配合变量的话,也可以这么写:

# 先把文件大小存到变量里
file_size=$(rclone ls your_remote:your_backup_path | awk '{print $1}')
# 再让bc计算转换
echo "$file_size / 1048576" | bc -l

再啰嗦下为啥之前的命令不行:

expr 1993211 / 1048576这个命令本身做的就是整数除法,会直接舍去小数部分返回1,然后这个1通过管道传给bc -l,相当于你执行了echo 1 | bc -l,结果肯定是1呀,根本没让bc做浮点计算~

内容的提问来源于stack exchange,提问作者ndom91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:51:58