首页 > 系统相关 >Linux-Shell 小数运算,四舍五入

Linux-Shell 小数运算,四舍五入

时间:2023-10-19 09:55:38浏览次数:38  
标签:四舍五入 Shell 运算 bc 5.999 echo scale Linux 5.001

在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 'GEGIN{printf("%.2f",'$a' / '$b')}'  #直接引用变量,用单引号将变量引起来

 

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

 

标签:四舍五入,Shell,运算,bc,5.999,echo,scale,Linux,5.001
From: https://www.cnblogs.com/yeyuzhuanjia/p/17774015.html

相关文章

  • 配置自定义服务为linux系统服务
    背景使用go语言写了一个测试环境部署上报的备份服务,以防因为主服务挂了影响部署操作。 想把这个backup服务设置了系统服务,如果因环境重启等异常,可以自动重启使用的环境的Centos71、首先需要创建一个systemdunit存储配置文件[Unit]Description=deployreportbackupse......
  • linux应急处置
    实战手把手教你,Linux服务器应急处置教学小编 CyberTorres 2023-10-0914:48 发表于广东收录于合集#linux1个#服务器1个#技术分享2个当你负责的服务器被黑了,怎么办?没遭遇过如此大风大浪的运维人员:哦,**!我该怎么办,点根香烟冷静一下。Wait!小编请您先切断网络,再......
  • 你是否还迷茫要不要学习Linux?
    近几年Linux这个词好像很流行,无论是现实工作中,还是在网络信息中均可以听到或者看到有关Linux相关的内容,可以说Linux无处不在。说到这,有人可能会问了,我对Linux比较感兴趣,但是没有接触过Linux,对它不了解,不知道是否适合自己,是否值得我花费时间和经历去深入学习,因此陷入一种比较迷茫的......
  • [ Linux ] 手动放行端口
    https://www.cnblogs.com/yeungchie/在云服务商的网页端操作防火墙会不生效,不清楚原因。可以用下面的命令来手动放行端口。iptables-tnat-IPREROUTING-ptcp--dport$port-mstate--stateNEW-jACCEPTiptables-PFORWARDACCEPT......
  • linux 内核 ---信号量(semaphore)
    信号量使用说明(1)定义信号量structsemaphoresem;(2)初始化信号量voidsema_init(structsemaphore*sem,intval);该函数初始化信号量,并设置信号量sem的值为val。(3)获得信号量externvoiddown(structsemaphore*sem);externint__must_checkdown_interruptible(st......
  • 手机使用linux
    手机使用linux调查方法termux使用手机linux分析手机是mate40使用内置linux需要获取root,华为关闭root获取网站还要刷机,麒麟9000还加了很多锁使用termux不需要root,直接虚拟一个linux就是额外占用一个系统准备手机华为mate40:安装termux能上外网(服了,还......
  • linux系统安装ftp记录
    使用的是yum工具安装ftp服务器1.首先安装ftp-0.17-89.el9.x86_64,这个不是ftp服务器程序,只是ftp访问工具:yuminstall-yftp2.安装vsftpd,ftp服务程序:yuminstall-y vsftpd启动服务:       systemctlstartvsftpd.service随系统启动:       ......
  • CentOS 7编译Linux内核(6.5.7)详细步骤
    CentOS7编译Linux内核(6.5.7)详细步骤前言对于一件要完成的任务,如果已有现成的、完善的方法文档可供参考,则博文只需引用链接即可,无需重复写一遍。写博客是结合自身需求,总结之前网络上没有的方法。本文即基于CentOS764位,给出编译当前最新版Linux(6.5.7)的详细步骤。参考链接:......
  • Linux 环境下(Ubuntu)webbench的安装问题解决与使用
    webbench最多可以模拟3万个并发连接去测试网站的负载能力。并发能力比较高,可以测试https及动态静态页面。适合中小型网站测试承受能力。原理:父进程fork若干个子进程,每个子进程在用户要求时间或默认的时间内对目标web循环发出实际访问请求,父子进程通过管道进行通信,子进程通过......
  • 【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页
    问题描述在AppServiceLinux环境中,如部署Tomcat应用后,如果访问的页面找不到,应用会返回一个由Azure生成的404页面,那么是否可以修改它呢? PS:如果是AppServiceforWindows,可以参考博文[ AppServiceforWindows环境中为Tomcat自定义4xx/5xx页面 : https://www.cnblogs.com......