科学计数法使用e标识数值,将科学计算学转化为数字的思路:按e右边的数字移动小数点位数。e右边的数字如果是负数,则向左移动小数点。示例如下:

1.2345678e2 = 123.45678

1.2345678e-2 = 0.012345678

1.7615562e+06 = 1761556.2

1.87982e7 = 18798200

1e3 = 1000

那么在shell中,如何转化科学计数法为数字呢,方法如下:这里以"1.7615562e+06" (或者1.7615562e6)为示例:

[root@kevin ~]# echo "1.7615562e6"| gawk '$1=strtonum($1)'

1.76156e+06

1)科学计数法转为十进制

[root@kevin ~]# printf "%f" 1.7615569e+06

1761556.900000

[root@kevin ~]# echo "1.7615569e+06"| awk '{printf("%f",$0)}'

1761556.900000

[root@kevin ~]# echo "1.7615569e+03"| awk '{printf("%f",$0)}'

1761.556900

[root@kevin ~]# echo "1.7615569e+04"| awk '{printf("%f",$0)}'

17615.569000

[root@kevin ~]# echo "1.7615569e-6"| awk '{printf("%f",$0)}'

0.000002

[root@kevin ~]# echo "1.7615569e-4"| awk '{printf("%f",$0)}'

0.000176

[root@kevin ~]# echo "1.7615569e-3"| awk '{printf("%f",$0)}'

0.001762

[root@kevin ~]# echo "1.7615569e-2"| awk '{printf("%f",$0)}'

0.017616

需要注意: 这种方法,转化结果中小数点后面都保留6位:

1)e后面的数字若是正数,则小数点后面要保留6位,不够的话,用0补上。

2)e后面的数字若是负数,则小数点后面要保留6位,多的话,此时按照四舍五入,保留6位。

2)科学计数法转为十进制并保留两位小数

[root@kevin ~]# echo "1.7615569e+06"| awk '{printf("%.2f",$0)}'

1761556.90

保留三位小数

[root@kevin ~]# echo "1.7615569e+06"| awk '{printf("%.3f",$0)}'

1761556.900

3)科学计数法转为十进制并取整

[root@kevin ~]# echo "1.7615569e+06"|awk '{printf("%d",$0)}'

1761556

[root@kevin ~]# echo "1.7615569e3"|awk '{printf("%d",$0)}'

1761

[root@kevin ~]# echo "1.7615569e02"|awk '{printf("%d",$0)}'

176

4)科学计数法转十进制并四舍五入取整

[root@kevin ~]# echo "1.7615569e+06"| awk '{printf("%d",$0+0.5)}'

1761557

[root@kevin ~]# echo "1.7615563e+06"| awk '{printf("%d",$0+0.5)}'

1761556

5)如何将小数点后无用的0去掉, 可以参考: 日常运维的Shell脚本中截取字符串的做法,即用变量扩展的方式

[root@kevin ~]# echo "1.7615569e+06"| awk '{printf("%f",$0)}'

1761556.900000

[root@kevin ~]# var=$(echo "1.7615569e+06"| awk '{printf("%f",$0)}')

[root@kevin ~]# echo ${var%%0*}

1761556.9

或者使用sed方法也可以

[root@kevin ~]# echo "1.7615569e+06"| awk '{printf("%f",$0)}'

1761556.900000

[root@kevin ~]# var=$(echo "1.7615569e+06"| awk '{printf("%f",$0)}')

[root@kevin ~]# echo "$var"|sed 's/0*$//'

1761556.9

[root@kevin ~]# echo "1.7615569e+06"| awk '{printf("%f",$0)}'| sed 's/0*$//'

1761556.9

6)sed去除掉小数点之后的字符

[root@kevin ~]# echo "kevin.123"|sed "s/\.*//g"

kevin123

\..*代表了小数点之后的1到多个

[root@kevin ~]# echo "kevin.123"|sed "s/\..*//g"

kevin

[root@kevin ~]# echo "kevin_123"|sed "s/\_*//g"

kevin123

[root@kevin ~]# echo "kevin_123"|sed "s/\_.*//g"

kevin

命令解释:

*代表0到多个。故\.*只能替换掉小数点变成空。\_*同理。

.*代表1到多个。故\..*将小数点后的全部去掉了。\_.*同理。

7)shell中的数字计算说明

1)bc方法

bc是比较常用的linux计算工具了,而且支持浮点运算:

[root@kevin ~]# a=`echo 1+1 | bc`

[root@kevin ~]# echo $a

2

这种方法没法解决浮点数运算的精度问题,如下几种浮点数计算情况就傻X了!

[root@kevin ~]# a=`echo 1+1 | bc`

[root@kevin ~]# echo $a

2

[root@kevin ~]# b=`echo "1.2*1.2" | bc`

[root@kevin ~]# echo $b

1.4

[root@kevin ~]# c=`echo "5.0/3.0" | bc`

[root@kevin ~]# echo $c

1

[root@kevin ~]# d=`echo "scale=2;5.0/3.0" | bc`

[root@kevin ~]# echo $d

1.66

[root@kevin ~]# e=`echo "scale=2;5.0/6.0" | bc`

[root@kevin ~]# echo $e

.83

2)expr方法

不支持浮点数计算,这是个坑,而且要注意数字与运算符中的空格。

[root@kevin ~]# a=`expr 1+1`

[root@kevin ~]# echo $a

1+1

[root@kevin ~]# a=`expr 1 + 1`

[root@kevin ~]# echo $a

2

[root@kevin ~]# b=`expr 10 / 2`

[root@kevin ~]# echo $b

5

3)$(())方法

同expr,不支持浮点数运算

[root@kevin ~]# a=$((1+1))

[root@kevin ~]# echo $a

2

[root@kevin ~]# b=$((1 + 3 ))

[root@kevin ~]# echo $b

4

4)let方法

不支持浮点数运算,而且不支持直接输出,只能赋值

[root@kevin ~]# let a=1+1

[root@kevin ~]# echo $a

2

[root@kevin ~]# let b=50/5

[root@kevin ~]# echo $b

10

[root@kevin ~]# let c=1.2*2

-bash: let: c=1.2*2: syntax error: invalid arithmetic operator (error token is ".2*2")

5)awk方法

普通的运算:

[root@kevin ~]# a=`echo | awk '{print 1.0/2.0}'`

[root@kevin ~]# echo $a

0.5

控制精度:

[root@kevin ~]# b=`echo | awk '{printf("%.2f",1.0/2.0)}'`

[root@kevin ~]# echo $b

0.50

传递参数:

[root@kevin ~]# c=`echo | awk -v a=1 -v b=3 '{printf("%.4f",a/b)}'`

[root@kevin ~]# echo $c

0.3333

awk结合BEGIN(小数点后面保留6位)

[root@ss-server ~]# awk 'BEGIN{printf "%.2f%%\n",(87/500)*100}'

17.40%

[root@ss-server ~]# awk 'BEGIN{printf "%.2f%%\n",(100/300)*100}'

33.33%

综合来看,还是awk的方法最靠谱,其他的方式都有相应问题。所以推荐在日常维护场景下使用awk来搞数学计算。

到此这篇关于Linux下科学计数法(e)转化为数字的方法 的文章就介绍到这了,更多相关Linux e转化为数字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:linux shell实现判断输入的数字是否为合理的浮点数

101个shell脚本 猜数字游戏代码

Shell中判断字符串是否为数字的6种方法分享

Shell脚本中判断变量为数字的3种方法

Shell脚本实现的猜数字小游戏

PowerShell中把IP转换为长整形数字的方法

shell实现数字打印从100到200的数

shell字符串比较判断是否为数字

linux将数字转为科学计数法,Linux下科学计数法(e)转化为数字的方法相关推荐

  1. 四种常用的命名规则:帕斯卡命名法、驼峰命名法、下划线命名法、匈牙利命名法

    帕斯卡命名法.驼峰命名法.下划线命名法.匈牙利命名法 其中前三种用的比较多. 1,帕斯卡命名法(Pascal) 程序代码示例: ShowMessage(); string PassWord; 单字之间 ...

  2. 骆驼命名法,帕斯卡命名法与下划线命名法

    骆驼式命名法: 正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字.例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数: 插入代码:        printEmployee ...

  3. 帕斯卡命名法、驼峰命名法、下划线命名法

    帕斯卡命名法.驼峰命名法.下划线命名法.匈牙利命名法 其中前三种用的比较多. 帕斯卡命名法(Pascal) 程序代码示例: ShowMessage(); string PassWord; 单字之间不以 ...

  4. 【日常学习】命名规则 - 驼峰命名法、帕斯卡命名法、匈牙利命名法、下划线命名法

    变量如果随便起名字,不仅其他工作人员难以交接,自己看着也非常混乱,如果按照命名规则进行管理,代码可读性会大大提升 文章参考博客:局外人Lee - 三种编程规则:驼峰命名法.帕斯卡命名法.匈牙利名 f- ...

  5. linux怎么离线安装gcc文件夹,CentOS下离线安装gcc环境,图文详细,方法全面

    CentOS下离线安装gcc环境,图文详细,方法全面 下载 方式1:如果有网的虚拟机还没有安装,可以直接 yum install --downloadonly --downloaddir=/root/ ...

  6. 四种编程命名规则:驼峰命名法,帕斯卡命名法,匈牙利命名法,下划线命名法

    人们交流靠各种语言,每行都有每行的所谓的"行话".程序员也不例外,众所周知,程序员都是用代码进行交流的.那么除了在代码中的注释之外, 程序员如何读懂别人的程序呢? 当然,程序员之间 ...

  7. 骆驼命名法变量命名规范——匈牙利命名法、骆驼命名法、帕斯卡命名法、下划线命名法

    骆峰式命名法(Camel-Case)是电脑程式编写时的一套命名规则(惯例). 骆峰式命名法就是当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时 ,第一个单词以小写字母开始:第二个单词 ...

  8. 可转债策略之---(摊饼玩法,溢价玩法,强赎玩法,下修玩法,双低玩法)

    什么是可转债 可转债的债券和转换特性对应着债权和期权的双重特性,也就是可转债价值=债券价值+股票看涨期权.我用白话来说,可转债就是公司向你借钱给您的一个借条,这个利率不得低于当期货币利率,也就是说必须 ...

  9. 常用命名规范分类:匈牙利命名法、下划线命名法、驼峰命名法、帕斯卡命名法

    目录 1.匈牙利命名法(Hungarian) 变量属性 2.下划线命名法(UnderScoreCase) 3.驼峰命名法(小驼峰命名法)(Camel) 4.帕斯卡命名法(大驼峰命名法)(Pascal) ...

  10. mfc编程淘汰了吗_四种基本的编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法、下划线命名法)...

    匈牙利命名法 匈牙利命名法是早期的规范,由微软的一个匈牙利人发明的,是 IDE 还十分智障的年代的产物.那个年代,当代码量很多的时候,想要确定一个变量的类型是很麻烦的,不像现在 IDE 都会给提示,所 ...

最新文章

  1. Android短信的发送和广播接收者实现短信的监听
  2. python学好了能干啥_新手该如何学python怎么学好python?_python学好了能干什么
  3. 皮一皮:低调的凡尔赛...
  4. [转][linux]简单的linux下的tcp/udp
  5. php手机接口购物车怎么实现,php购物车的实现原理
  6. selenium:我的第一个程序
  7. mybatis insert 动态生成插入的列及插入的值
  8. CNN的几种经典模型
  9. java HashMap实现中文分词器 应用:敏感词过滤实现
  10. pip 指定镜像源 指定版本 批量安装
  11. X大佬:建议被降级降薪员工主动辞职,网友炸了
  12. rocketmq mysql_聊聊rocketmq-mysql的BinlogPositionManager
  13. Nmap简单使用教程
  14. 一、Matlab图像处理入门
  15. 浅析图的邻接矩阵进行平方运算的含义
  16. 九度 OJ 之 题目1538:GrassLand密码
  17. 2021年12月电子学会图形化四级编程题解析含答案:聪明的小猫
  18. 考研日语线上笔记(八):完型易混易考知识点梳理篇
  19. WPF 创建秒表 计时器
  20. 计算机在铁路中的应用论文800字,交通运输和交通论文,关于计算机信息网络系统在铁路交通运输管理中的应用相关参考文献资料-免费论文范文...

热门文章

  1. 算法导论第三版 第3章习题答案
  2. libiconv android编译,(OK) 编译libiconv-1.14(静态库)—CentOS 7— android-ndk
  3. DOSBox安装及使用教程
  4. 克莱姆法则(cramer法则)详解
  5. LSTM神经网络实战
  6. Python算法教程:找出图的连通分量
  7. 基于 HTML5 Canvas 的 3D 热力云图效果
  8. 数据库多表查询时,返回值该如何接收问题
  9. python连接阿里云服务器_阿里云服务器python
  10. 市区对应的编码获取入库过程