这是我在codewar上遇到的一个题,我用我自己的方法做出了解答,如下:

 1 #!/bin/bash2 3 distance=`echo "$1*10000"|bc|cut -d"." -f1`4 a=05 n=16  7 if [ $distance -le 0 ];then8   echo None9 else
10   while [ $n -lt $distance ] ; do
11     let a++
12     n=$((2**a))
13   done
14   echo $a
15   fi
16
17 重庆-刘勇 2018/11/15 23:29:25

在这里因为不知道小数点的处理办法,所以用了看起来很愚笨的cut来切割,直到通过后可以看到其他人的答案。有一种写法,里面解决了很多小数点的问题,所以我记录了下来,如下:

 1 distance=$12 paper="0.0001"3 count=04 if (( $(echo "$distance<0" | bc -l) ))5 then 6 echo "None"7 else8  while (( $(echo "$paper<$distance" | bc -l)  ))  9 do
10  paper=$(echo "scale=4;$paper*2" | bc )
11  count=$((count+1))
12 done
13 echo $count
14 fi

第一个问题:

  scale的用法:

    1、显示小数点后的位数:

[root@centos7 ~]#echo "scale(1.234567)"|bc
6
[root@centos7 ~]#echo "scale(1.234000)"|bc
6

      他是会识别后面的0的哪怕无意义。

  length是计算数值长度的另一个参数,他会计算小数点前后所有的位数,但是有个地方需要注意,当这个小数点前只有一个0的时候,它是不计算这个0的

[root@centos7 ~]#echo "length(1.234567)"|bc
7
[root@centos7 ~]#echo "length(0.123456)"|bc
6

    2、截取小数点的位数:  

[root@centos7 ~]#echo "scale=3;1.23456*10"|bc
12.34560
[root@centos7 ~]#echo "scale=3;1.23456*10/1"|bc
12.345
[root@centos7 ~]#echo "scale=3;(1.23456+10)/1"|bc
11.234

    从此代码可以看到,scale的生效和/1有绝对的关系,没有这个格式会导致scale无效,无论是加减法,或者乘法,经过测试以后发现最后的一步计算都必须以除法结尾,最简单的就是/1了,当然本来最后一步就是除法就可以忽略了。

利用bc进行大小比较
    echo "1>2"|bc
  这里一定一定要注意的是,这个比较结果就是0或1,而不是代表true或false,因而不能用于if后的条件判断!切记切记
  但是在添加(())以后可以进行比较判断。注意看他们的结果,在添加了(())后,对表达式进行了真假判断

[root@centos7 ~]#(( $(echo "1>2"|bc) ))
[root@centos7 ~]#echo $?
1
[root@centos7 ~]#echo "1>2"|bc
0
[root@centos7 ~]#echo "1<2"|bc
1
[root@centos7 ~]#(( $(echo "1<2"|bc) ))
[root@centos7 ~]#echo $?
0

bc还可以方便快捷的进行进制转换:

  标准格式: echo "obase=2;ibase=16;FFFF" | bc ,obase表示输出的进制,ibase表示输入的进制,默认输入10位,所以也有简写为:echo "obase=2;123"|bc ,表示为输入10进制123,输出2进制

  但是有一个地方需要特别注意,格式中obase必须在前,ibase在后,否则会有计算错误,如下

[root@centos7 ~]#echo "ibase=8;obase=16;17"|bc
11
[root@centos7 ~]#echo "ibase=10;obase=16;17"|bc
11
[root@centos7 ~]#echo "obase=16;ibase=8;17"|bc
F
[root@centos7 ~]#echo "obase=16;ibase=8;10"|bc 8 [root@centos7 ~]#echo "obase=16;ibase=8;117"|bc 4F [root@centos7 ~]#echo "ibase=8;obase=16;117"|bc 59

  

转载于:https://www.cnblogs.com/tony3154/p/10126397.html

关于bc中小数点length,scale,(())以及进制转换相关推荐

  1. linux 大数字 进制转换,Linux下用bc快速进行数字进制转换

    介绍如何在Linux下用bc命令进行快速的数字进制转换. 我想Windows里,数字进制转换最方便的就是自带的calc计算器,但是它原没有我们可爱的Linux方便.Linux下,我们在term里敲 几 ...

  2. 强悍的 Ubuntu —— 强悍的任意进制转换命令行工具 bc

    bc - An arbitrary precision calculator language. 我们要用到 bc 的 ibase 和 obase 方法. ibase是输入数字的进制, obase就是 ...

  3. 十进制和26进制转换算法

    [问题描述] 在Excel中,列的名称是这样一个递增序列:A.B.C.-.Z.AA.AB.AC.-.AZ.BA.BB.BC.-.BZ.CA.-.ZZ.AAA.AAB-. 我们需要将上述列名序列和以下自 ...

  4. 16进制转string java_java的2/10/16进制转换和字符串数字转换

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  5. c++将小数化为二进制_C++版进制转换(十进制,二进制,十六进制整数和小数)

    进制转换C++代码 #include #include #include #include using namespace std; void MainMenu() { system("cl ...

  6. 生成大小写字母加数字混合ID与自定义进制转换

    有时候可以在别的网站上看到类似于这样的ID : D6pPMSTjOFI, 关于数据库主键的选择园子里面也讨论过许多了,比如这篇 小议数据库主键选取策略(原创). 字符串作ID有时候还是有它的优点的,但 ...

  7. linux进制转换的函数,Linux shell 进制转换

    源地址链接:http://blog.csdn.net/axdc_qa_team/article/details/6090182 既然有需要,就把搜到感觉有用的进制转换函数或指令都贴在这里,便于以后应用 ...

  8. LeetCode Excel Sheet Column Number(进制转换问题)

    题意:给出excel表格中的列的表示形式,问是第多少列 思路:进制转换问题 代码如下: public class Solution {public int titleToNumber(String s ...

  9. java:数据结构(二)栈的应用(进制转换全收集)

    说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article ...

最新文章

  1. Android 调试 Release 包(debuggable)
  2. Gym 101606 F-Flipping Coins(概率dp)
  3. 电离辐射防护与辐射源安全基本标准_辐射防护与安全机考难点考点解析辐射防护标准...
  4. c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf
  5. Linux 复习重点目录
  6. linux gst-launch 播放视频旋转,【视频开发】Gstreamer中一些gst-launch常用命令
  7. 再次提醒自己测试过程中的侥幸导致失败
  8. zabbix服务器搭建
  9. 问题 G: 编写函数:数组的排序 (Append Code)
  10. 学习笔记_vnpy实战培训day03
  11. 匹配 边覆盖 独立集 顶点覆盖
  12. Webservice接口-简单实例
  13. 数据查询网站汇总——自用
  14. 要闻君说:华为与故宫携手共建智慧紫禁城;央视315曝光瞄准大数据黑市;华为官宣称自己也有操作系统了;美国夸口启动6G研发?...
  15. Adjust接入注意事项
  16. 产品新人如何才能找到第一份产品工作?
  17. Unity 调用C# Speech类将文字转换为语音
  18. 苹果开发者账号购买或续费支付表单填写全记录purchase form
  19. udacity深度学习--2. 深度学习简介--LESSON5 Jupyter notebook
  20. PDF在线预览插件汇总与方案总结

热门文章

  1. C#调用WebService实例和开发(转)
  2. 在TextView中实时显示数据
  3. python运维开发之第八天(socket)
  4. corpus  academic writing
  5. Android生命周期函数执行顺序
  6. ==与equal在java中应用的感悟
  7. editplus 快捷键
  8. Sqlserver 通用存储过程(二) 联合主键
  9. Android 秒级编译FreeLine
  10. “光伏进社区” 应及早谋划布局