在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. vue中mixin作用

  2. P1077-DP【黄】

    昨天好几道题没做出来很郁闷,结果今天上来半小时不到就直接做出一道黄DP题了,不错,又有写题的冲动了. 这道题我一直被那个"因为方案数可能很多,请输出方案数对 1000007取模的结果.&qu ...

  3. 电脑面试两道问题(python+shell)

    最近面试电脑代码面试遇到两个问题,供大家参考一下一.python脚本: 手写一个函数,实现两个数相加,并使用unittest与pytest工具测试函数正确性. 1.unnitest进行测试: impo ...

  4. C# WPF 简单自定义菜单切换动画

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏 C# WPF 简单自定义菜单切换动画 内容目录 实现效果 业务场景 编码实现 ...

  5. [转帖]Java 提速之 Large pages【译】

    https://juejin.cn/post/7011002046899978253 一.前言 最近花了很多时间在 JVM 的内存预留代码上.它开始是因为我们得到了外部贡献,以支持在 Linux 上使 ...

  6. [转帖]深度硬核文:Nginx的301重定向处理过程分析

    https://zhuanlan.zhihu.com/p/84539204 本文首发于公众号:js-mindmap 一,序言 "晚上九点,办公室里烟雾缭绕,工作进度依然没有什么进展.王二胖打 ...

  7. 常见的docker hub mirror镜像仓库

    阿里云(杭州) https://registry.cn-hangzhou.aliyuncs.com 阿里云(上海) https://registry.cn-shanghai.aliyuncs.com ...

  8. [转帖]--build=arm-linux

    今天在arm上用configure生成makefile时报错:configure: error: cannot guess build type; you must specify one 问题: 不 ...

  9. [转帖]JMeter压测Redis

    https://www.cnblogs.com/yjlch1016/p/14052402.html 一.Redis Data Set插件: https://jmeter-plugins.org/wik ...

  10. 申威3231服务器Redis性能验证-及最全信创CPU性能分析

    申威3231服务器Redis性能验证-及最全信创CPU性能分析 背景 公司里面新进了几台服务器. 有台申威服务器. 因为前段时间参与过一次申威的POC验证. 当时对性能有一点简单的理解. 但是因为不方 ...