[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的更多相关文章

  1. Storm分布式实时流计算框架相关技术总结

    Storm分布式实时流计算框架相关技术总结 Storm作为一个开源的分布式实时流计算框架,其内部实现使用了一些常用的技术,这里是对这些技术及其在Storm中作用的概括介绍.以此为基础,后续再深入了解S ...

  2. [20191012]使用bash从sql_id计算hash_value.txt

    [20191012]使用bash从sql_id计算hash_value.txt --//没有什么实际意义,仅仅验证方法是否可行.--//sql_id的计算是使用MD5算法进行哈希,生成一个128位的H ...

  3. [20190328]简单探究sql语句相关mutexes.txt

    [20190328]简单探究sql语句相关mutexes.txt --//摘要:http://www.askmaclean.com/archives/understanding-oracle-mute ...

  4. [20171113]修改表结构删除列相关问题.txt

    [20171113]修改表结构删除列相关问题.txt --//维护表结构删除字段一般都是先ALTER TABLE <table_name> SET UNUSED (<column_n ...

  5. [20191220]关于共享内存段相关问题.txt

    [20191220]关于共享内存段相关问题.txt --//我一直很好奇如果设置内核参数kernel.shmmax = 68719476736足够大,为什么我的测试实例还是建立3个共享内存段.--// ...

  6. Linux小知识(1): bash中执行数据库的相关操作

    工作中经常会遇到命令行操作数据库或登陆至其他服务器等情况,往往需要通过命令行进入相关的数据库或登陆至相关的服务器,再执行指令操作,因此有没有方法,在命令行或bash脚本中模拟进入数据库或登陆服务器操作 ...

  7. bash/shell 数学计算

    $ echo $((20.0/7)) $ zcalc $ bc <<< 20+5/2 $ bc <<< 'scale=4;20+5/2' $ expr 20 + 5 ...

  8. bc计算A股上市新股依次涨停股价

    几年的股市可谓惨不忍睹,不提也罢.唯有打新中签的时候,心里稍微有那么一点点的补偿,于是内心就YY可以30板吗,可以40板吗.于是就写了个连板的bc程序,每次中签的时候就运行一下,然后尽情的YY,然而每 ...

  9. shell使用eval进行赋值bc计算,bad substitution

    开始我认为是这样的: [root@jiangyi02.sqa.zmf /home/ahao.mah/ALIOS_TEST] #cat bbb.sh #!/bin/sh eval $1_new=123 ...

随机推荐

  1. 剑指offer笔记面试题12----矩阵中的路径

    题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径 ...

  2. SharePoint PowerShell 创建网站栏

    前言 最近,有这么个需求,需要使用PowerShell为网站集创建网站栏,好吧,直接看代码吧. Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorA ...

  3. Thymeleaf对象的使用:日期对象

    Thymeleaf在模板中使用 #dates 或 #calendars 两个对象来处理日期,这两个对象大部分类似. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2 ...

  4. SQL Prompt提示和SQL默认智能提示冲突解决

  5. SSH的本地、远程、动态端口转发实验笔记

    SSH端口转发 SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务.这一 ...

  6. css 知识点,你有可能不知道欧!

    1.[定位特性] 绝对定位和固定定位,同时设置left和right等同于隐式的设置宽度. <style> span{ position:fixed; left:30px; right:30 ...

  7. R基础绘图

    本节内容 0:小知识 1:绘图系统散点图的特征 2:基础绘图函数 3:基础绘图参数 4:图形设备 5:案例操作5个图形 0:小知识 summary() ## 对数据框或者向量进行描述性数据 read. ...

  8. 机器学习--支持向量机 (SVM)算法的原理及优缺点

    一.支持向量机 (SVM)算法的原理 支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析.它是将向量映射到一个更高维的 ...

  9. 算法问题实战策略 GALLERY

    地址 https://algospot.com/judge/problem/read/GALLERY 分析 如图 显然是需要在 0 1 2三个点进行监控即可.(0 2 3 也可) 根据题意,不存在回路 ...

  10. Mysql 如何创建一张临时表

    mysql 利用 temporary 关键字就可以创建出一个临时表.创建的这张表会在与服务器的会话终止时自动消失 语法:create temporary table tbl_name...; 规则:每 ...