前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Bash中如何使用浮点数运算?

在Bash中如何使用浮点数运算?

作者头像
程序熵
发布2024-06-06 15:59:25
830
发布2024-06-06 15:59:25
举报
文章被收录于专栏:技术汇技术汇

问题

我尝试在 Bash 脚本中将两个图像的宽度相除,但是 bash 给了我 0 作为结果:

代码语言:javascript
复制
RESULT=$(($IMG_WIDTH/$IMG2_WIDTH))

我确实研究了 Bash 指南,我知道我应该使用 bc,在互联网上的所有示例中他们都使用 bc。在echo中我尝试放入我的 SCALE,但是它没有工作。

这是我在教程中找到的例子:

代码语言:javascript
复制
echo "scale=2; ${userinput}" | bc

我怎样才能让 Bash 给我一个像 0.5 这样的浮点数?

回答

Bash shell 本身并不直接支持浮点数运算。Bash 是基于整数的,它的算术扩展 $(( expression )) 主要用于整数运算,并且不会自动处理浮点数。

如果你想在 Bash 脚本中进行浮点数运算,你可以借助一些外部工具或命令,如 bc(一款基础计算器程序)、awkpython(通过命令行调用)等。

使用 bc 命令

使用 bc 进行浮点数运算的方式如下:

代码语言:javascript
复制
scale=2
result=$(echo "scale=$scale; 300 / 200" | bc)
echo $result

这段脚本会计算 300 / 200 并保留两位小数,结果将会是 1.50scale=$scale 设置了 bc 的小数点后保留位数。这样,你就可以在 Bash 脚本中实现浮点数的计算了。

如果你想要更高的精度,可以设置更高的精度,例如:

代码语言:javascript
复制
scale=6

这将设置 bc 的精度为 6 位小数。根据你的需要调整 scale 的值即可。

或者以数学库模式运行:

代码语言:javascript
复制
result=$(echo "300 / 200" | bc -l)
echo $result

需要注意的是不是所有的 Linux 发行版都会默认安装 bc 命令行计算器工具。如果你发现系统中没有预装 bc,需要先安装再使用。

使用 awk 命令

使用 awk 来进行两个数的除法运算,可直接从管道输入中读取这两个数。

代码可以写为:

代码语言:javascript
复制
echo "$IMG_WIDTH $IMG2_WIDTH" | awk '{printf "%f \n", $1/$2}'

使用 python 命令

Python2 在2020年1月1日已经正式停止支持,这意味着它不再接收安全更新或错误修复,而且许多库和工具也在逐步放弃对 Python2 的支持。Python3 不仅包含了对Python2 中大部分功能的改进,还引入了许多新特性,提高了代码的可读性、安全性,并增强了对现代编程需求的支持,比如更好的字符串处理、更清晰的语法糖、asyncio 异步编程等。

为实现提问者需求,代码可以写为:

代码语言:javascript
复制
IMG_WIDTH=100
IMG2_WIDTH=200
python3 -c "print($IMG_WIDTH / $IMG2_WIDTH)"

或者

代码语言:javascript
复制
IMG_WIDTH=100
IMG2_WIDTH=200
echo "print($IMG_WIDTH / $IMG2_WIDTH)" | python3

参考

  • stackoverflow question 12722095
  • man bc
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 回答
    • 使用 bc 命令
      • 使用 awk 命令
        • 使用 python 命令
        • 参考
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档