分享

sh将科学计数法的数字转化为浮点型并再进行取整数

 叶知秋来 2017-04-22
例如: 1.105100000000000e+01
转化为浮点型如11.051 再转化为取整数部分为11
(1)awk '{$0+=0;sub(/\..*/,'');print}' urfile
(2) echo '1.105100000000000e+01' | awk '{print sprintf('%d',$0);}'
echo 0x2A | gawk '$1=strtonum($1)' #科学计数法转十进制 printf '%f\n'3.1188622400e+06 echo 3.1188622400e+06 | awk '{printf('%f\n',$0)}'#科学计数法转十进制并保留两位小数 echo 3.1188622400e+06 | awk'{printf('%.2f\n',$0)}' #科学计数法转十进制并取整 printf '%.f\n'3.1188622400e+06 echo 3.1188622400e+06 | awk '{printf('%d\n',$0)}'#科学计数法转十进制并四舍五入取整 echo 3.1188622400e+06 | awk'{printf('%d\n',$0+0.5)}'
Shell进制转换小结
I: 利用obase, ibase和bc:ibase是输入数字的进制,而obase就是输出数字的进制了。很好记,i是input,o是output。
注意,16进制数字的F要大写,否则,结果为0,是错误的。
举例说明:
10进制转2进制:
X

10进制转16进制: (如果输入是10进制的话,ibase可省略)

16进制转2进制:

16进制转10进制:(此时,只需指定ibase即可)

II: 利用echo的base#: $((base#number))
#其中number是欲转化的数,base是其进制数.(base也可省略,number默认是十进制,如果以0,或0x则分别是八进制和十六进制).
#echo $((012)) #8进制,结果为10 #echo $((0xFF)) #16进制,结果为255 #echo$((0xEF)) #echo $((0xFFFF)) #echo $((2#1101011)) #echo$((2#11111111)) #2进制,结果为255 #echo $((8#255)) #8进制,结果为173 #echo$((8#377)) #16进制,结果为217 #echo $((16#D9)) #echo $((16#FF))#有base不用0x,不然报错!8进制没问题!
另外这个用法还可以扩展:
$((base#number^base#Base1))#可以理解为number和Base1这两者按照base进制做了个异或操作.
比如:
#base=1f #Base1=ff #echo $((16#$base^16#$Base1)) 224#这个例子就表示,base(1f)和Base1(ff)按照16进制做了异或操作(结果为e0,即224)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多