bc是强大而常用的计算工具。不过在除法运算时,如果得到的结果值小于1,得到的小数前面的0不存。本篇提供几个常用小数点前缺0的解决方法。

 [root@maqing ~]# bc
bc 1.06.
Copyright -, , , , , Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=; /
.

打开bc进入交互模式,我们键入scale=2; 1/3 回车,看到结果0.33前的0没有---注意此处保留小数点人2位 scale=2不能少,少了结果为是0 。

解决方法如下:

 #!/bin/bash
#方法1
res1=$(printf "%.2f" `echo "scale=2;1/3"|bc`)
res2=$(printf "%.2f" `echo "scale=2;5/3"|bc`)
#方法2
#v=$(echo $big $small | awk '{ printf "%0.2f\n" ,$1/$2}')
v1=$(echo | awk '{ printf "%0.2f\n" ,$1/$2}')
v2=$(echo | awk '{ printf "%0.2f\n" ,$1/$2}')
#方法3
mem1=`echo "scale=2; a=1/3; if (length(a)==scale(a)) print 0;print a "|bc`
mem2=`echo "scale=2; a=5/3; if (length(a)==scale(a)) print 0;print a "|bc`
echo res1 is $res1
echo res2 is $res2
echo v1 is $v1
echo v2 is $v2
echo mem1 is $mem1
echo mem2 is $mem2

这里提供了三种方法,其中第方法1、方法3使用的bc处理,方法2使用的awk处理。执行输出结果我们看下:

 [root@maqing]# sh bc_point_zero.sh
res1 is 0.33
res2 is 1.66
v1 is 0.33
v2 is 1.67
mem1 is 0.33
mem2 is 1.66

三种方法我们可以看到,方法1、方法3对小数点后面的值不会四舍五入,而方法2(awk)方法使用printf 时会对小数点(浮点运算)的值四舍五入进位。所以浮点运行时还是建议使用awk处理。不过在取整数时,awk默认也是不会四舍五入的。

 # echo   | awk '{ printf "%d\n" ,$1/$2}'

 # echo   | awk '{ printf "%d\n" ,$1/$2+0.5}'

 # echo   | awk '{ printf "%d\n" ,$1/$2+0.5}'
 

awk在取整数运算时,是需要加0.5进行进位的。

注:没有进位其实和小数点后保留的位数有关的,在小数点后的位数大于4时会自动进行进位,具体可以参考维基百科数值修约规则 。

最新文章

  1. [收集]MVC3 HTML辅助方法集录
  2. ORACLE 迁移MYSQL 随笔
  3. 【转】Java面试题全集2.2(下)
  4. Hibernate框架(未完待续······)
  5. Python3 多线程下载代码
  6. idea使用generator自动生成model、mapper、mapper.xml(转)
  7. winform 承载 WCF 注意,可能不是工作在多线程模式下
  8. 受限玻尔兹曼机RBM—简易详解
  9. C# 邮件发送系统
  10. 学习C++ Primer 的个人理解(零)
  11. FileUtil.java
  12. UML_静态图
  13. SQL server语句练习
  14. Android源码及SDK国内镜像下载
  15. scip习题(1) scheme和c实现的对比
  16. Java Web项目(Extjs)报错七
  17. Metasploit远程调用Nessus出错
  18. 【转帖】M1、M2增速
  19. TensorFlow指定GPU使用及监控GPU占用情况
  20. 【NOIP2017】 宝藏 状压dp

热门文章

  1. 快速切题 poj 1003 hangover 数学观察 难度:0
  2. bzoj2929
  3. hdu4685
  4. popViewControllerAnimated 后的刷新问题
  5. CUDA库函数module management
  6. JUnit出错,却没有显示任何报错信息【待解答】
  7. Linux系统在启动过程中grub引导文件丢失的解决方法
  8. 使用 create-react-app 构建 react应用程序
  9. 解如何利用 XML 和 JavaScript Object Notation 在 Ajax 客户端和 Java 服务器之间传输数据(代码)(Oracle)。
  10. EasyDarwin如何支持点播和RTMP/HLS直播?EasyDSS!