Bash 中的浮点数学计算:综合指南

2023-11-05

Bash 是一种广泛使用的 Unix shell,它本身并不具备处理浮点数学的能力。然而,在各种工具和实用程序的帮助下,Bash 可以有效地执行浮点计算。在本文中,我们将探索在 Bash 中执行浮点数学计算的不同技术以及实际示例。

目录

  1. Bash 中的浮点数学简介
  2. bc 的基本浮点运算
  3. 使用 awk 进行高级浮点计算
  4. 使用 expr 处理复杂数学
  5. 浮点数舍入
  6. Bash 中浮点数学的技巧
  7. 结论

1. Bash 中的浮点数学简介

浮点数对于科学和工程计算至关重要。不幸的是,Bash 的算术运算本身并不支持浮点数。为了克服这个限制,我们可以利用 bc、awk 和 expr 等工具。

2. bc 的基本浮点运算

`bc`是Basic Calculator的缩写,是一个支持任意精度的命令行计算器。它是在 Bash 中执行浮点运算的优秀工具。 bc 的基本语法是:

1
result=$(echo “比例=N;表达” | bc)

Where N是所需的小数位数,表达式是要计算的数学表达式。

示例:加法和减法

1
2
3
4
5
6
7
8
9
10
num1=3.14
num2=1.73
 
# 添加
result=$(echo “比例=2;$num1 + $num2” | bc)
echo “加法:$结果”
 
# 减法
result=$(echo “比例=2;$num1 - $num2” | bc)
echo “减法:$结果”

该命令将输出:


Output:
Addition: 4.87 Subtraction: 1.41

3. 使用 awk 进行高级浮点计算

`awk`是一种文本处理工具,可用于 Bash 中更高级的浮点运算。它可以处理多种操作和变量,使其成为复杂计算的强大选择。

示例:乘法和除法

1
2
3
4
5
6
7
8
9
10
num1=5.25
num2=2.5
 
# 乘法
result=$(awk "BEGIN { printf(\"%.2f\", $num1 * $num2) }")
echo “乘法:$结果”
 
# 分配
result=$(awk "BEGIN { printf(\"%.2f\", $num1 / $num2) }")
echo “部门:$结果”

该命令将输出:


Output:
Multiplication: 13.12 Division: 2.10

4. 使用 expr 处理复杂数学

`expr`是另一个命令行实用程序,可用于在 Bash 中执行复杂的数学运算。虽然它不直接支持浮点运算,但您可以将它与 bc 结合使用以获得强大的结果。

示例:求幂

1
2
3
4
5
base=2.5
exponent=3
 
result=$(echo “比例=2;$基数^$指数” | bc)
echo “求幂:$结果”

该命令将输出:


Output:
Exponentiation: 15.62

5. 浮点数舍入

对浮点数进行舍入是许多计算中的常见要求。您可以使用`printf`结合`bc` or `awk`将数字四舍五入到特定的小数位数。

示例:使用 printf 进行舍入

1
2
3
4
5
6
7
8
9
number=3.14159
 
# 四舍五入到小数点后两位
舍入数=$(printf "%.2f" $number)
echo “四舍五入到小数点后两位:$rounded_number”
 
# 四舍五入到小数点后 3 位
舍入数=$(printf "%.3f" $number)
echo “四舍五入到小数点后 3 位:$rounded_number”

该命令将输出:


Output:
Rounded to 2 decimal places: 3.14 Rounded to 3 decimal places: 3.142

6. Bash 中浮点数学的技巧

  • 使用 bc、awk 或 expr 和 bc 的组合进行浮点计算,因为 Bash 本身并不支持它们。
  • 使用 bc 或 awk 时将表达式用双引号引起来,以避免特殊字符和空格的潜在问题。
  • 使用bc中的scale选项来控制结果中的小数位数。
  • 使用 printf 在脚本中实现一致的格式和浮点数舍入。
  • 请注意浮点数的精度限制和潜在的舍入误差。

结论

在 Bash 中执行浮点数学计算需要了解其局限性并使用 bc、awk 和 expr 等可用工具。通过有效地利用这些工具并遵循上述提示,您可以放心地在 Bash 脚本中执行复杂的计算。通过实际示例和实践经验,您将能够熟练地在 Bash 中处理浮点数学。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 中的浮点数学计算:综合指南 的相关文章

  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 如何查找所有以句号结尾的单词?

    我有一个包含许多以 a 结尾的单词的文件 其中大部分是缩写 例如 etc p s 如何输出一个仅显示一次所有这些单词的列表 所有单词前面都有一个空格 因此可以使用该空格来查找单词的开头 没有一个单词出现在该行的开头 文件中没有句子 因此句点
  • 使用 su 和 Expect 脚本登录用户时遇到问题

    我正在为一个班级制作一个网站 您可以使用用户名和密码登录 然后它会将您带到一个显示您在班级中的成绩的页面 该网站正在运行bash脚本 https github com jduga002 rapache 并将托管在用户已有用户名和密码登录的计
  • 分叉/多线程进程|重击

    我想让我的代码的一部分更加高效 我正在考虑让它分叉成多个进程 并让它们一次执行 50 100 次 而不是只执行一次 例如 伪 for line in file do foo foo2 foo3 done 我希望这个 for 循环运行多次 我
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • bash中的用户名、密码程序

    我有一个程序 要求用户输入用户名和密码 然后将其存储在文本文件中 第一列是用户名 第二列是密码 我需要一个命令 在用户输入用户名和新密码时替换密码 如下我拥有的 bin bash admin menu Register User echo
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • Spyder 无法启动:spyder:找不到命令

    我已经安装了spyderpip3 install spyder在苹果电脑上 但是 当我无法从 bash 启动它时 它会显示spyder command not found 我已按照其说明进行操作Github页面 https github c
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • 使用 python 更改目录

    我碰巧发现我无法从 python 代码中更改实际目录 我的测试程序如下 from os import system def sh script system bash c s script sh cd home sh pwd 的输出pwd
  • 使用 XMLStarlet(图像注释)将值连接到现有 xml 属性

    我正在使用 xml 来注释图像 我正在使用 xmlstarlet 和 unix bash 命令 但当我尝试将值附加到现有 xml 属性值时遇到一些问题 例如 我有
  • 以受限用户身份运行 monit 并使其监视需要 root 权限的进程

    我有一个用 Ruby 编写的特定脚本 需要 root 权限 大多数其他进程不需要它 因此很容易在 Monit 中设置 不是这个 服务器需要监听386 这个端口只有root可用 我不会详细说明原因 因为 1 我不是一个低级的人 2 到目前为止
  • Bash + sed/awk/cut 删除第 n 个字符

    我试图删除每行的第 6 7 和第 8 个字符 下面是包含文本格式的文件 实际输出 cat test 18 40 12 172 16 70 217 UP 18 42 15 172 16 70 218 DOWN 格式化后如下所示 cat tes
  • 卷曲:参数列表太长

    我想通过 Sparkpost API 使用curl post 发送一封附有pdf 文件的电子邮件 插入我使用的 pdf 我的 test pdf 约为 200KB data cat test pdf base64 wrap 0 但不知怎的 这
  • 配置confixtx.yaml文件?

    我正在尝试使用以下内容构建 Hyperledger Fabric 网络 Smartforce 订购者组织 Falcon io ORG1 弗罗斯特 io ORG2 我已经使用 cryptogen 工具生成了所有加密材料 不希望使用 confi
  • 检查 Bash 数组中是否存在元素[重复]

    这个问题在这里已经有答案了 我想知道是否有一种有效的方法来检查 Bash 数组中是否存在元素 我正在寻找类似于我可以在Python中做的事情 例如 arr a b c d if d in arr do your thing else do
  • 如何在 Linux 中重新添加 unicode 字节顺序标记?

    我有一个相当大的 SQL 文件 它以 FFFE 的字节顺序标记开头 我使用 unicode 感知的 linux 分割工具将此文件分割成 100 000 行块 但是当将这些传递回窗口时 它确实not与第一个部分以外的任何部分一样 只是它具有
  • 将 mysql 查询输出存储到 shell 变量中

    我需要一个变量来保存从数据库检索的结果 到目前为止 这基本上是我正在尝试但没有成功的事情 myvariable mysql database u user p password SELECT A B C FROM table a 正如你所看
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t

随机推荐

  • p9plus升级鸿蒙教程,华为P9 Plus(VIE-AL10 全网通 EMUI 5.0)一键ROOT图文详解教程

    伴随着安卓刷机越来越流行 很多安卓用户都喜欢上了这种可以自定个性系统的行为 那么华为P9 Plus VIE AL10 全网通 EMUI 5 0 怎么获取ROOT权限 华为P9 Plus VIE AL10 全网通 EMUI 5 0 一ROOT
  • IMEI、IMSI、ICCID、SN是什么?意义和区别?通信模组或手机的唯一识别码

    最近在做几个4G移动端的产品 初入行门有很多生涩的名词 想获取一个全球唯一ID作为设备后台管理编号 就扯出了 IMEI IMSI ICCID SN 这几个东西 IMEI IMEI 国际移动设备识别码 International Mobile
  • 如何正确理解三极管的放大区、饱和区、截止区

    作为电子初学者来说 模拟电路非常重要 模拟电路的三极管的应用是重中之重 能正确理解三极管的放大区 饱和区 截止区是理解三极管的标志 很多初学者都会认为三极管是两个 PN 结的简单凑合 如下图 这种想法是错误的 两个二极管的组合不能形成一个三
  • 多线程和高并发介绍

    多线程和高并发介绍 文章目录 多线程和高并发介绍 前言 一 什么是多线程 1 多线程介绍 2 多线程实现原理 3 白话文解释多线程 4 多线程存在的问题 二 什么是高并发 1 高并发介绍 2 如何提升系统的并发能力 三 多线程和高并发 总结
  • es6对象多层解构、数组解构

    对象类 基础对象解构 const obj a 1 b 2 c 3 const a b c obj console log a b c 1 2 3 多层对象解构 const obj a 1 b 2 c 3 d d1 4 const a b c
  • qt调用Linux脚本范例,QT下实现对Linux Shell调用的几种方法

    使用QProcess QThread include int main QProcess execute ls return 0 QProcess poc new QProcess poc gt start ping 222 207 53
  • [极客大挑战 2019]Knife

    极客大挑战 2019 Knife 主界面 很显然 题目已经内置了一个一句话木马 我们只需要用蚁剑连接即可 但是我在连接蚁剑时报错了 错误如下 经过搜索 原来是开启了手动代理模式 在菜单中关闭即可 更改后成功进入 在根目录下找到flag文件
  • 20050405:什么都要会啊

    为了要修补门户的页面 今天学会了三样 怎么用Photoshop切割图片并存入网页 怎么用DW在表格中平铺背景图片 在么用Tomcat部署网站 真的是什么都要会啊 今天下午在漫网论坛上发了封贴子 晚上却被删了 原贴如下 关于日本动漫中女性角色
  • C 语言实现简单有限状态机

    简介 常说的状态机是有限状态机 FSM 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型 三个特征 状态总数 state 是有限的 任一时刻 只处在一种状态之中 某种条件下 会从一种状态转变 transition 到另一种
  • KVM快照

    KVM快照就是将虚拟机在某一个时间点上的磁盘内容 全部 或部分 内存和设备状态保存一下 以备将来恢复之用 一 内存状态快照 只是保持内存和虚机使用的其它资源的状态 如果虚机状态快照在做和恢复之间磁盘没有被修改 那么虚机将保持一个持续的状态
  • 不安装Visual Studio,只用Windows SDK搭建VC环境

    首先你需要下载的是 Microsoft Windows SDK for Windows 7 and NET Framework 4 下载以后你得到的是一个网络安装文件 确保网络的连接 安装Windows SDK 7 1 注意得到的Windo
  • git的分支

    1 master主分支 在初始化本地Git仓库的时候 Git默认已经帮我们创建了一个名字叫做master的分支 通常我们把这个master分支叫做主分支 在实际工作中 master主分支的作用是 用来保存和记录整个项目已完成的功能代码 因此
  • 图形基础-叉乘

    using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviour public Vecto
  • flink部署三种模式(案例操作)

    文章目录 一 Local模式 1 应用场景 2 操作 二 Standalone 模式 1 应用场景 2 部署模式 2 1 会话模式 2 1 1 安装规划 2 1 2 修改配置 2 1 3 分发安装目录 2 1 4 启动集群 2 1 5 访问
  • xp的服务器系统怎么安装win7系统教程,把xp系统重装成win7最简单实用的方法

    xp系统重装成win7 很多网友现在想把把 因为微软对xp系统的停止服务 很多人都想安装win7系统了 xp系统重装win7有什么方法好 小编推荐在线重装系统 那就是系统一键重装大师 这个软件功能非常强大 现在就让小编告诉大家把xp系统重装
  • shell 重定向

    输入重定向 默认的输入文件是标注输入stdin 0 可以使用下面的方法重定向输入 command lt filename 这样就会从filename文件中读取数据送给command命令使用 例如 cat etc passwd 输出重定向 默
  • Qt Q_UNUSED() 做什么用的

    Q UNUSED 是用来在编译时忽略函数不用的形参 这样就不会黄色报警了 当然也可以不加 就会有黄色报警
  • Python配置MySQL数据库使用

    创建配置文件 config ini MySQL host 172 xxx xxx xxx port 3306 user root password db bgp routing charset utf8 创建读取配置文件 readConfi
  • 如何在 Ubuntu 20.04 上安装 Skype

    Skype 是一种电信应用程序 提供用户和用户组之间的聊天和视频等功能 大多数现代操作系统 移动设备和智能手表都提供此功能 它还提供了通过移动网络跨境呼叫的选项 本教程将帮助您在 Ubuntu 20 04 LTS Focal Fossa L
  • Bash 中的浮点数学计算:综合指南

    Bash 是一种广泛使用的 Unix shell 它本身并不具备处理浮点数学的能力 然而 在各种工具和实用程序的帮助下 Bash 可以有效地执行浮点计算 在本文中 我们将探索在 Bash 中执行浮点数学计算的不同技术以及实际示例 目录 Ba