[20190929]bash使用bc计算的相关问题.txt
[20190929]bash使用bc计算的相关问题.txt
--//快放假没什么事情,使用bash写一些小程序,转化number到oracle number编码,使用bc计算功能,发现一些小问题
--//做一些记录:
1.bc显示小数点前的0:
$ echo "scale=3; 1/3" | bc
.333
--//很明显如果结果是0.xxxxx,bc的计算结果前面的0不显示。
--//可以在网上找到一些方法:
res1=$(printf "%.2f" `echo "scale=2;1/3"|bc`)
--//另外bc是高精度的计算器,可能小数点位数很多,上面的printf不行。
--//可以采用连接的方式,仅仅先判断第一个字符是否是"."就ok了(当然时正数的情况下)。
2.四舍五入问题:
# echo "scale=3; 2/3" | bc
.666
--//运算不做四舍五入。
3.scale设置无效的问题:
# echo "scale=0 ; (0.01+193)" | bc
193.01
--//我想取整,结果输出193.01.导致设置scale=0无效,似乎+,-,*运算都不起作用,仅仅/可以控制这种行为。
# echo "scale=0 ; (0.01+193)*1" | bc
193.01
# echo "scale=0 ; (0.01+193)/1" | bc
193
4.输出折行问题。
# echo 2^250 | bc
18092513943330655534932966407607485602073435104006338131165247501236\
42650624
--//如果计算超过68个字符,会出现折行情况,当然这是正常的,加入tr过滤ok。
# echo 2^250 | bc | tr -d '\n\\\r'
--//另外我在window下使用cygwin ,输出里面有"\r"字符.通过例子说明:
$ cat aa.sh
#! /bin/bash
set -x
a=$(echo 5+4 | bc )
echo "$a"
echo $a
set +x
$ ./aa.sh
++ echo 5+4
++ bc
+ a=$'9\r'
+ echo $'9\r'
9
+ echo $'9\r'
9
+ set +x
--//你可以发现在windows下bc的输出多了1个\r字符.必须过滤掉.估计linux下没有这个问题.
--//另外注意一个小问题,就是要保存文件格式为unix的文件格式.
5.计算精度问题:
# echo "l(.99999999999999999999)/l(100)" | bc -l
0
--//bc -l 缺省的scale=12,必须改变scale设置。
# echo "scale=66;l(.99999999999999999999)/l(100)" | bc -l
-.000000000000000000002171472409516259138266501956630606707163335634
--//有一些情况即使设置很高精度反而出现问题,例子:
> bc -l
scale=180
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(100)
-65.0000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000248123508996454719162468354
--//这个正常输出-65.
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
0000000000000000000000496247017992909438324936737
scale=20
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.00000000000000000044
scale=10
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.0000000052
scale=4
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.0047
--//当你限制scale过小时,反而误差更大。
scale=400
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000171086395582297672322451960
6.bc不支持科学计数法(科学计数法):
# echo "1e2" | bc
(standard_in) 1: parse error
7.另外我发现bash编程能不用bc尽量不用,能不加载math库,尽量不要加载。
--//最后我发现我写出来的转化程序number到oracle number编码运行不是很快,我是在windows下使用cygwin调试的。基本上转化1个大
--//约接近2秒,我只能考虑别的方式尽可能减少bc使用。
最新文章
- Netty源码分析之服务端启动过程
- selenium 封装代码
- Linux-设置固定IP
- Android深度探索--HAL与驱动开发----第八章读书笔记
- 关于Winform 2.0以后多线程不能更新UI的办法
- hibernate继承(转)
- asp.net webapi 序列化为xml 时实体属性增加<;![CDATA[]]>;防止特殊字符
- FZU 2216 The Longest Straight 模拟
- CSS2伪类选择器要点
- iOS的沙箱目录和文件操作
- Redis学习资料汇总(荐)
- java- 枚举的常见用法
- hdu 2612 Find a way(BFS)
- jquery选择器控制Html元素
- Day4 - Linux分区规划与xshell使用排错
- mint-ui vue双向绑定
- 分布式架构原理解析,Java开发必修课
- [物理学与PDEs]第2章习题7 一维不可压理想流体的求解
- 泊爷带你学go -- 经典的继承与接口 简直吊炸天 !
- DOM操作 JS事件 节点增删改查
热门文章
- 地图SDK全新版本v4.3.0上线 - 新增多项功能及优化
- MySQL数据库:在命令提示符中使用mysql
- git 现在本地创建仓库 再 推送到 远程 github 仓库中
- [Linux] 安装grafana并且添加influxdb监控
- 如何在文本编辑器中实现搜索功能? 字符串比较算法 BF算法 RK算法
- css3中calc、vw、vh、vmin、vmax 属性的应用及兼容性详解
- Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 构造
- Tomcat 设置JVM内存大小
- 【STM32H7教程】第20章 STM32H7的GPIO应用之无源蜂鸣器
- 1+x证书web前端开发jquery专项练习测试题