[20191013]oracle number类型存储转化脚本.txt
[20191013]oracle number类型存储转化脚本.txt
--//测试看看是否可以利用bc obase=100的输出解决问题。另外以前脚本忘记考虑尾数的四舍五入问题。
--//也许编程就是这样,总有一些细节没有考虑到...
--//代码如下num2raw_5.sh:
#! /bin/bash
#! number convert oracle raw.
odebug=${ODEBUG:-0}
# process input parameter ,delete "," and all spaces. save to variable v_num. and length to variable v_len.
v_num="$*"
v_num=${v_num//[, ]/}
# strip e or trailing 0s in decimals or 0000.000 output 0 ,
v_num=$(echo $v_num/1 + 0 | sed -e "s/[eE]+\?/*10^/" -e "s/^/scale=180;/" | bc | tr -d '\n\\\r' | sed -e "s/\.\([0-9]*[1-9]\)0\+$/.\1/" -e "s/\.0\+$//")
if [[ "$v_num" =~ ^-.*$ ]]; then
v_sign=1
v_num=${v_num:1:180}
else
v_sign=0
fi
if [ $odebug -eq 1 ] ; then
echo v_num="$v_num"
fi
v_res=""
if [ "$v_num" == "0" ]; then
v_res="80"
echo "$v_res"
exit 0
fi
v_pos=$(expr index $v_num ".")
if [ $v_pos -gt 1 ]; then
v_exp=$(( v_pos/2 ))
elif [ $v_pos -eq 0 ]; then
v_exp=$(( (${#v_num}+1) /2 ))
elif [ $v_pos -eq 1 ]; then
v_tmp1=${v_num:1:180}
v_tmp2=$(echo $v_tmp1 | sed 's/^0\+//g')
v_exp=$(( (${#v_tmp2} - ${#v_tmp1})/2 ))
fi
v_exp1=$(printf "%02x" $(( $v_exp+192 )))
if [ $v_sign -eq 1 ]; then
v_exp1=$(printf "%02x" $(( 0xff - 0x${v_exp1} )))
fi
v_res=${v_exp1}${v_res}
# oracle number type max length is 22 bytes (not 22 is 21 bytes??), 1 bytes exponent.
# bc不作四舍五入,要加5*10^-41解决问题。
v_tmp=$(echo "scale=180 ; a=$v_num / 100^($v_exp) +5*10^-41; scale=40;a/1 " | bc | tr -d '\n\\\r'| sed -e "s/\.\([0-9]*[1-9]\)0\+$/.\1/" -e "s/\.0\+$//" )
if [ $odebug -eq 1 ] ; then
echo v_num="$v_num" v_len="$v_len" v_exp="$v_exp" v_exp1="$v_exp1" v_tmp="$v_tmp"
fi
if [ $v_sign -eq 0 ]; then
v_res=${v_res}$(echo "obase=100;$v_tmp" | bc | tr -d "." | awk 'BEGIN{RS=" +"}/./{printf ",%02x", $1+1}')
else
v_res=${v_res}$(echo "obase=100;$v_tmp" | bc | tr -d "." | awk 'BEGIN{RS=" +"}/./{printf ",%02x", 101-$1}')
fi
if [ $v_sign -eq 1 -a ${#v_tmp} -lt 40 ]; then
v_res=${v_res}",""66"
fi
echo "$v_res"
[20191013]oracle number类型存储转化脚本.txt的更多相关文章
- [20191003]oracle number类型存储转化脚本.txt
[20191003]oracle number类型存储转化脚本.txt --//完善脚本,增加支持科学记数法.比如1e4之类的写法. 2.测试:$ cat test.txt012251234100-4 ...
- ORACLE NUMBER类型Scale为0引发的问题
今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE ...
- Oracle Number类型超长小数位为0问题
碰到了一个非常奇怪的问题,从Excel拷贝出来的数据,位数很长,通过Pl Sql 导出到Oracle后为0了,而且设置查询条件为0时,无法查询出来,条件大于0居然能查询出来,通过to_number也是 ...
- Oracle number类型前端界面和数据库查询不一致 number精度问题
[发现问题] [问题分析] Ⅰ.在前端界面查询,发现了库存中存在这样的数量值.但是在数据库中查询时显示正常.即6.999999999999997 为 7. Ⅱ.至于这种小数产生,我以为是oracle存 ...
- oracle number 类型 只显示10位精度
,) show numwidth; 设置为15位 ; xa ------------------ 123456789012.12 或者 TO_CHAR(xa,'FM099999999999.09999 ...
- ORACLE 中NUMBER类型默认的精度和Scale问题
在ORACLE数据库中,NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^-130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间.P 是Precison的英文 ...
- [20190930]oracle raw类型转化number脚本.txt
[20190930]oracle raw类型转化number脚本.txt --//写一个简单oracle raw转化number脚本,简单说明:--//输入必须是c1,02 或者 c102,不支持c1 ...
- oracle中的number类型
number 数据类型 number (precision,scale) a) precision表示数字中的有效位,如果没有指定precision的话,oracle将使用38作为精度: b) ...
- oracle中int类型和number类型区别
INT类型是NUMBER类型的子类型.下面简要说明:(1)NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数.假设定义SAL列为 ...
随机推荐
- 更改组织属性-以更改maxrecordsforexporttoexcel为例
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复232或者20161101可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Android 上下文菜单 PopupMenu
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s ...
- C#&.Net干货分享-构建后台自动定时任务的源码
1.创建一个自动处理中心任务参数的类,直接源码: namespace Frame.AutoProcess{ /// <summary> /// 委托(用于异步处理任务) ...
- Flask报如下错误:SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
在同一个项目中由于flask_sqlalchemy版本不同,有时会报如下错误 错误信息如下: flask_sqlalchemy\__init__.py:: UserWarning: SQLALCHEM ...
- Recover With Until Time fails With RMAN-20207 When Time Is Before Last RESETLOGS (Doc ID 159405.1)
Recover With Until Time fails With RMAN-20207 When Time Is Before Last RESETLOGS (Doc ID 159405.1) A ...
- Linux —— 时间(tzselect、timedatactl命令,查看和修改时区,修改时区为东八区)【转】
转自:https://blog.csdn.net/weixin_42167759/article/details/90648225 一.设置linux修改时区首先查看当前时区 #date -R显示结果 ...
- BERT-wwm、BERT-wwm-ext、RoBERTa、SpanBERT、ERNIE2
一.BERT-wwm wwm是Whole Word Masking(对全词进行Mask),它相比于Bert的改进是用Mask标签替换一个完整的词而不是子词,中文和英文不同,英文中最小的Token就是一 ...
- flag 履行我的flag
以后数组开小就不吃饭!!!!!! 上午考试不吃午饭 下午考试不吃晚饭 晚上考试不吃早饭 我以后还能吃饭吗 11.12距离csp-s还有2天,我的数组开小了,履行承诺,不吃饭了
- nodejs的require是如何执行的
通常,在Node.js里导入是通过 require函数调用进行的. Node.js会根据 require的是相对路径还是非相对路径做出不同的行为. 相对路径 相对路径很简单. 例如,假设有一个文件路径 ...
- golang数据结构之双链表
目录结构: doubleLink.go package link import ( "fmt" ) //HerosNode 链表节点 type HerosNode struct { ...