[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使用。
[20190929]bash使用bc计算的相关问题.txt的更多相关文章
- Storm分布式实时流计算框架相关技术总结
Storm分布式实时流计算框架相关技术总结 Storm作为一个开源的分布式实时流计算框架,其内部实现使用了一些常用的技术,这里是对这些技术及其在Storm中作用的概括介绍.以此为基础,后续再深入了解S ...
- [20191012]使用bash从sql_id计算hash_value.txt
[20191012]使用bash从sql_id计算hash_value.txt --//没有什么实际意义,仅仅验证方法是否可行.--//sql_id的计算是使用MD5算法进行哈希,生成一个128位的H ...
- [20190328]简单探究sql语句相关mutexes.txt
[20190328]简单探究sql语句相关mutexes.txt --//摘要:http://www.askmaclean.com/archives/understanding-oracle-mute ...
- [20171113]修改表结构删除列相关问题.txt
[20171113]修改表结构删除列相关问题.txt --//维护表结构删除字段一般都是先ALTER TABLE <table_name> SET UNUSED (<column_n ...
- [20191220]关于共享内存段相关问题.txt
[20191220]关于共享内存段相关问题.txt --//我一直很好奇如果设置内核参数kernel.shmmax = 68719476736足够大,为什么我的测试实例还是建立3个共享内存段.--// ...
- Linux小知识(1): bash中执行数据库的相关操作
工作中经常会遇到命令行操作数据库或登陆至其他服务器等情况,往往需要通过命令行进入相关的数据库或登陆至相关的服务器,再执行指令操作,因此有没有方法,在命令行或bash脚本中模拟进入数据库或登陆服务器操作 ...
- bash/shell 数学计算
$ echo $((20.0/7)) $ zcalc $ bc <<< 20+5/2 $ bc <<< 'scale=4;20+5/2' $ expr 20 + 5 ...
- bc计算A股上市新股依次涨停股价
几年的股市可谓惨不忍睹,不提也罢.唯有打新中签的时候,心里稍微有那么一点点的补偿,于是内心就YY可以30板吗,可以40板吗.于是就写了个连板的bc程序,每次中签的时候就运行一下,然后尽情的YY,然而每 ...
- shell使用eval进行赋值bc计算,bad substitution
开始我认为是这样的: [root@jiangyi02.sqa.zmf /home/ahao.mah/ALIOS_TEST] #cat bbb.sh #!/bin/sh eval $1_new=123 ...
随机推荐
- 剑指offer笔记面试题12----矩阵中的路径
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径 ...
- SharePoint PowerShell 创建网站栏
前言 最近,有这么个需求,需要使用PowerShell为网站集创建网站栏,好吧,直接看代码吧. Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorA ...
- Thymeleaf对象的使用:日期对象
Thymeleaf在模板中使用 #dates 或 #calendars 两个对象来处理日期,这两个对象大部分类似. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2 ...
- SQL Prompt提示和SQL默认智能提示冲突解决
- SSH的本地、远程、动态端口转发实验笔记
SSH端口转发 SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务.这一 ...
- css 知识点,你有可能不知道欧!
1.[定位特性] 绝对定位和固定定位,同时设置left和right等同于隐式的设置宽度. <style> span{ position:fixed; left:30px; right:30 ...
- R基础绘图
本节内容 0:小知识 1:绘图系统散点图的特征 2:基础绘图函数 3:基础绘图参数 4:图形设备 5:案例操作5个图形 0:小知识 summary() ## 对数据框或者向量进行描述性数据 read. ...
- 机器学习--支持向量机 (SVM)算法的原理及优缺点
一.支持向量机 (SVM)算法的原理 支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析.它是将向量映射到一个更高维的 ...
- 算法问题实战策略 GALLERY
地址 https://algospot.com/judge/problem/read/GALLERY 分析 如图 显然是需要在 0 1 2三个点进行监控即可.(0 2 3 也可) 根据题意,不存在回路 ...
- Mysql 如何创建一张临时表
mysql 利用 temporary 关键字就可以创建出一个临时表.创建的这张表会在与服务器的会话终止时自动消失 语法:create temporary table tbl_name...; 规则:每 ...