在shell中做小数运算,可以借助bc 或者awk工具

一、使用bc做小数运算,scale指定小数点位数

1、加法运算(scale参数无效)

#echo "5.999 + 5.001"|bc

6.000

#echo "5.111+ 5.1114"|bc

10.2224

运算结果小数点位数以加数中最大的为准

2、减法运算(scale参数无效)

同加法运算

运算结果小数点位数以减数中最大的为准

3、乘法运算

#echo "5.12 * 5.6000"|bc

28.6720

乘积小数点位数默认以乘数中小数点位数最多的为准(不指定scale参数)

使用scale指定乘积的小数点位数时:

实际的乘积小数点位数为 m

乘数中小数点位数最多为 n

当scale<n时,scale不起作用,乘积的小数点位数为n

当scale>=m,乘积的小数点位数为m,末尾不会补零

当n<scale<m时,乘积的小数点位数为scale值

4、除法运算

#echo "scale=2;5 / 2"|bc

2.50

除法中如果不指定scale参数,则结果没有小数位,小数位数完全按scale值来显示,计算结果的小数位数不足scale的值,则末尾补0。

所以对于加法运算、减法运算、乘法运算,可以将其再通过除法运算,实现保留小数位。

比如,对于加法运算,echo "5.999 + 5.001"|bc 可以转换成echo "scale=2;(5.999 + 5.001)/1"|bc

对于减法运算,echo "5.999 - 5.001"|bc 可以转换成echo "scale=2;(5.999 - 5.001)/1"|bc

对于乘法运算,echo "5.999 * 5.001"|bc 可以转换成echo "scale=2;(5.999 * 5.001)/1"|bc

scale只会保留指定长度的小数,但是并不会进行四舍五入;实现四舍五入需要借助printf进行四舍五入。例如:printf  "%.2f" $(echo "5.999 + 5.001"|bc)。

二、awk做小数运算

1、建议在awk中引用shell变量,使用格式:" '$var' "或者'"$var"'

2、awk使用print函数进行运算

#a=5;b=3;awk 'BEGIN{print "'$a'" / "'$b'"}'

1.66667

3、awk使用printf函数控制运算结果的小数点位数

#a=5;b=3

#echo "$a $b" |awk '{printf("%.2f",$1/$2)}' #首先使用echo输出变量,然后通过$1,$2,...引用变量值

1.67

#a=5;b=3

#awk 'BEGIN{printf("%.2f",'$a' / '$b')}'  #直接引用变量,用单引号将变量引起来

这两种方法,awk则可以做到四舍五入,bc本身不能四舍五入,但是可以借助printf进行四舍五入。例如:printf  "%.2f" $(echo "5.999 + 5.001"|bc)

Linux-Shell 小数运算,四舍五入的更多相关文章

  1. Linux Shell 数学运算

    Linux Shell 数学运算 在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果.要在Shell中进行数学运算,我们需要借助点小手段.目前,Linux Shell中进行数学运 ...

  2. Shell初学(六)Linux Shell 时间运算以及时间差计算方法

    Linux Shell 时间运算以及时间差计算方法 时间的加减,以及时间差的计算. 1. 时间加减 这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒. 如:1990-01 ...

  3. Linux shell 整数运算 let [ ] (( )) expr以及 浮点数 bc用法(转)

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算:2)Linux shell 中使用 expr 与 b ...

  4. Linux Shell 小数比较

    #!/bin/bash #######expr 方法是错误的,在比较相同位数时可以,当位数不同就会出错,如100.00>70.00就会得出错误的结果 a=123b=123c=99.99rat=` ...

  5. Linux shell 变量 数学 运算

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...

  6. 推荐掌握Linux shell中这7种运算命令

    #常见的算术运算符号 .+.-:加减 .*./.%:乘.除.取余 .**:幂运算 .++.--:增加记减少 .!.&&.||:取反,并且,或 .<,<=,>,=> ...

  7. Linux Shell编程基础

    在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls   显示当前路径下的文件,常用的有 -l 显示长格式  -a 显示所有包括隐 ...

  8. linux shell脚本相关知识

    最近的项目中,有一个编写linux shell脚本的任务.由于之前不是很熟悉,在这个过程中遇到了很多困难,查找了很多资料,也收获了很多.下面是linux shell脚本中常用的知识总结. 1基础语法 ...

  9. Linux Shell脚本简单语法汇总(Deepin下运行)

    整理自: https://www.runoob.com/?s=shell Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 业界所说的 shell 通常都是指 sh ...

  10. 前端学习 linux —— shell 编程

    前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...

随机推荐

  1. 30 秒使用 Sealos 搭建个人密码管理器 Vaultwarden

    我与 LastPass 的曲折恋情 超过 8 年网龄的我,注册过很多网站帐号,每个网站的密码我都用不同的复杂密码.一开始我全靠脑力记忆这些密码,后来渐渐觉得记起来很困难,就记录在笔记本上.但是随着时间 ...

  2. 在线P图工具(基于minipaint开发)

    在浏览github过程中,发现一个超级实用的仓库,viliulsle开发的minipaint,类似于photoshop的网页版.基于webpack开发的,打包非常简单,故自己搭建了一套. 在线预览 在 ...

  3. 基于python开发的口罩供需平台

    基于python开发的口罩供需平台 预览地址:https://i.mypython.me 开发语言:python/django 意见反馈:net936艾特163.com

  4. 【SHELL】命令补全

    # 指定文件 dodo_path=/home/skull/work/scripts/dodo echo "hello skull" ## COMP_WORDS 是一个 bash 内 ...

  5. CSS - 使图片自适应

    img {         height: 100%;         object-fit: cover; }

  6. Linux-用户组-groupad-groupdel-usermod

  7. [转帖]15 个必须知道的 chrome 开发工具技巧

    在Web开发者中,Google Chrome是使用最广泛的浏览器.六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备的工具.你可能已经熟悉了它的部分功能,如使用console和 ...

  8. [转帖]oracle如何删除datafile,误删除Oracle datafile 无法打开数据库

    1.在Oracle open方式下,直接从OS上删除了datafile文件. rm /u02/rmants.dbf 2.数据库关闭后,无法打开数据库,只能到mount状态. SQL> alter ...

  9. 定位解析一个因脚本劫持导致webpack动态加载异常的问题

    问题描述 项目现场的前端项目在点击顶部的导航栏切换不同的模块时,会有小概率出现模块加载报错的情况: 我们的前端项目里是有基于react-loadable做的懒加载的,上图的12.be789340.ch ...

  10. 初识VUE响应式原理

    作者:京东零售 吴静 自从Vue发布以来,就受到了广大开发人员的青睐,提到Vue,我们首先想到的就是Vue的响应式系统,那响应式系统到底是怎么回事呢?接下来我就给大家简单介绍一下Vue中的响应式原理. ...