shell的计算什么时候会有小数?什么时候是整数
来源:互联网 发布:淘宝网京东商城童装 编辑:程序博客网 时间:2024/04/27 14:36
最近的脚本因为涉及到一些计算,比方乘以80%,乘以1.2,除以80%这种的,有时候希望能得到小数,有时候希望结果是截断小数的,但是实际计算的时候还是迷迷糊糊的,所以特此整理一下。
1.首先来几个实验验证一下:
从上面这个图中可以看到,在bc的交互命令模式下:
1+2=3
1*0.8=.8 这里还是希望结果是0.8
10*1.23=12.3
1/5=0
22/5=4 整数的除法是截断的,24/5=4.8,截断之后仍然是4,有时候我们会希望四舍五入,有时候我们希望保留两位小数。
继续了解一下,会有
0.8/2 =0
1/0.8 =1
1*5/4=1
这些结果。
那我们开始解决一些疑问吧:
1.1/0.8=.8
如何得到0.8的结果?
2.1/5=0
如何得到0.2的结果?
324/5=4
如何得到5的结果(四舍五入)?
4.1/3=0
如何得到0.33的结果(保留两位小数)?
首先,bash只支持整型运算,但可以使用bc,awk和nawk工具来处理更复杂的运算。
1.scale … |bc 方式可以指定保留小数位数
[root@db22 ~]# echo "scale=2;1/5"|bc.20[root@db22 ~]# echo "scale=2;24/5"|bc4.80
说明: echo命令的输出通过管道传送给bc程序。变量scale赋值为2,表示小数点后的有效位数为2。bc 来计算1除以5的值
2.awk的方式
[root@db22 ~]# echo `awk -v x=1 -v y=5 'BEGIN{printf "%.2f\n",x/y}'`0.20
说明:通过命令行传递参数列表,gawk从该列表中获取参数值:x=2.45,y=3.123。乘法运算完成后,printf函数格式化并显示运算结果,保留小数点后两位数,并将输出赋给变量product。
2.1 printf的格式化输出
上面代码中的%.2f 被称为格式符(format specifier)。格式符由以下几部分组成:
%[flags][width][.precision]conversion % - 5 .2 f
- %是必须的, 任何格式符都由百分号开始
- flags 是可选的,详见下表
- width 是可选的, 表示输出的宽度
- precision 可选的, precision 依赖于 conversion, 详见下表.
- conversion 是必须的, 表示如何格式化参数, 详见下表
awk 支持如下转换符(conversion)。
awk 支持如下标志(flag)
awk -v x=1 -v y=5 'BEGIN{printf "%#f\n",x*y}'
结果: [5.000000] (对于%g) 不删除尾部0 [10.4000] (对于%G) 不删除尾部0 [10.4000]awk 精度(precision)的意义
sprintf 函数
如果你不想打印,而是想格式化一个字符串,然后把它保存到一个变量中,该怎么办呢?试一试 sprintf 函数吧。
#! /usr/bin/awk -fBEGIN { str=sprintf("%5.2f", 33.698); print str;};{};END {};
利用已经习得的命令来解决我们在一开始提出的4个问题
那我们开始解决一些疑问吧:
1.1/0.8=.8
如何得到0.8的结果?
2.1/5=0
如何得到0.2的结果?
324/5=4
如何得到5的结果(四舍五入)?
4.1/3=0
如何得到0.33的结果(保留两位小数)?
四舍五入的这个可以在结果上+0.5来达到。
参考文档:
shell脚本中小数的计算
Linux学习4之shell脚本中的小数运算
awk格式化输出
- shell的计算什么时候会有小数?什么时候是整数
- 什么时候会用到shell编程
- Android view的getHeight()是在什么时候有值的
- 什么时候会是使用多态
- a++ 什么时候是错误的??
- 什么时候
- 什么时候
- 单身的你什么时候会恋爱
- IDFA的值什么时候会发生改变
- hive什么时候会使用本地的mapreduce
- Service的onRebind()方法什么时候会调用
- 关于什么时候会发生死锁的问题
- 什么时候会发生战争!
- 征信逾期多久会消除,五年又是从什么时候开始算的?
- 什么时候有ERis的培训班啊?
- 什么时候不用shell
- 什么时候不用shell
- 什么时候使用Shell
- “莫欺少年穷”巨海成杰《从日薪五元到亿万身家》出有声书啦了
- jdbc的数据库驱动类DriverManager.getConnection()详解
- 存储磁盘个数到限制后VG的在线扩容方法
- ubuntu上安装或更新flash教程
- Vue Web App 内存泄漏-调试和分析
- shell的计算什么时候会有小数?什么时候是整数
- TensorLayer保存和读取模型
- 小迪教程第九天——ASP+ACCESS注入/HTTP头注入
- 九月份月考题
- 2017-10-20 西电 新一代人工智能与深度学习“国际”研讨会第一天见闻
- 虚拟机如何安装linux
- 第三章 创建主窗口
- JS中setTimeout()的用法详解
- Android 百度地图 动态画多边形,并判断一个点是否在多边形内部