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

 

这是我在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5V串口接3.3V单片机串口怎么搞?

写在前面&#xff1a;两个单片机由于电平不同&#xff0c;串口通信可能会失败&#xff0c;这时候需要通过电平转换电路来解决&#xff0c;本文给出了两种方法&#xff0c;一种是通过三极管搭建&#xff0c;另一种是MOS管搭建&#xff0c;在硬件工程师的笔试中也经常会出现这样的…

Django之缓存、信号和图片验证码

一、 缓存 1、 介绍 缓存通俗来说&#xff1a;就是把数据先保存在某个地方&#xff0c;下次再读取的时候不用再去原位置读取&#xff0c;让访问速度更快。 缓存机制图解 2、Django中提供了6种缓存方式 1. 开发调试   2. 内存   3. 文件   4. 数据库   5. Memcache缓存&…

这焊接技术在班里排名第一没问题吧?

晚上和朋友讨论PCB LAYOUT&#xff0c;然后自己也动手起来了&#xff0c;刚好看到宇哥的一篇焊接的文章&#xff0c;这焊接技术这么厉害的人&#xff0c;layout那不得是吊炸天啊。作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xf…

Yocto,嵌入式开发者不可不知的强大工具【附资料与活动】

各个嵌入式开发团队出于不同的原因&#xff0c;都希望构建适合自己开发需求的嵌入式系统。Yocto正是这样一个工具&#xff0c;任何一个厂商都可以根据Yocto定制属于自己的系统。 Yocto 是什么 Yocto 是一种伞式项目&#xff0c;侧重于通过开放式嵌入内核&#xff0c;打造嵌入式…

第四次过程性考核

https://gitee.com/liuji1/fourth_process_assessment (一) 问题&#xff1a;使用套接写连接编写一个简单的聊天室程序&#xff0c;客户端主函数放在Client_Main.java文件中&#xff0c;服务器端主函数放在Server_Main.java文件中 (二) 要求&#xff1a; 1.客户端从控制台进行…

劝你不要转行

在知乎收到一个咨询&#xff0c;问题如下您好&#xff0c;想向您请教一些问题。想转行做嵌入式工程师个人基本信息29岁&#xff0c;电子与通信工程专业硕士&#xff0c;毕业后就职于某车企&#xff0c;主要从事类似项目管理一职。去年考入某事业单位&#xff0c;业余时间相对较…

linux下DHCP的安装配置

今天在整理以前的资料的时候&#xff0c;看到了这篇过去积攒的资料&#xff0c;过程详细所以拿来给大家一块分享&#xff0c;同时我也在做&#xff0c;提高一下熟练度。 【实验名称】Linux下DHCP服务的配置与安装【实验拓扑】【实验目标】了解DHCP服务的工作原理&#xff0c;掌…

浅谈一下嵌入式中的强符号和弱符号

__attribute__ 是一个编译器指令&#xff0c;其实是 GNU C 的一种机制&#xff0c;本质是一个编译器的指令&#xff0c;在声明的时候可以提供一些属性&#xff0c;在编译阶段起作用&#xff0c;来做多样化的错误检查和高级优化。用于在 C、C、Objective-C 中修饰变量、函数、参…

POJ_1862 Stripies 【贪心】

一、题面 POJ1862 二、分析 反省一下&#xff0c;自己英语水平着实不行&#xff0c;该题其实就是问若给出若干个这种生物&#xff0c;根据这种体重变换方式&#xff0c;最终合并成一个后&#xff0c;体重最少是多少。根据公式 $m 2\sqrt{m_{1}m_{2}}$ 我们可以发现&#xff0c…

想成为硬件工程师,难不?

有很多朋友经常会问&#xff0c;成为高级嵌入式系统硬件工程师&#xff0c;需要做到哪些呢?那么&#xff0c;我们就先从嵌入式硬件工程师是个什么概念入手。一、如何理解“嵌入式”的概念呢?1、从硬件上&#xff0c;将基于CPU的处围器件&#xff0c;整合到CPU芯片内部&#x…

.Net/C#中Cache的用法

Cache 即高速缓存&#xff0c;使用合理可以提高网站访问速度&#xff0c;减少服务器压力 什么是缓存&#xff1f;Web 应用程序通常都是被多个用户访问。一个Web站点可能存在一个“重量级”的加载&#xff0c;它能够使得站点在访问的时候&#xff0c;拖慢整个服务器。当站点被大…

Maven继承

继承为了消除重复&#xff0c;可以把pom 中很多相同的配置提取出来&#xff1b;如&#xff1a;grouptId&#xff0c; version 等。 在使用的时候子工程直接继承父工程的依赖版本号&#xff0c;子工程中不再需要指定具体版本号&#xff0c;方便统一管控项目的依赖版本问题。 创建…

电子驱蚊器就是智商税

说下我的情况我家不能烧蚊香&#xff0c;因为我们领导说家里有小孩&#xff0c;蚊香对小孩很不好&#xff0c;这是楠哥的锅&#xff0c;我不背。但是我又不喜欢挂蚊帐&#xff0c;总觉得蚊帐挂起来后觉得很压抑&#xff0c;黑乎乎的感觉。所以能不挂的时候就不挂&#xff0c;然…

串口通讯到底有没有累积误差及对时钟精度的要求

1. 问题背景&#xff1a;2. 问题分析:3. 总结:1. 问题背景&#xff1a; 对于嵌入式开发者来说&#xff0c;串口应该是应用最广泛的模块&#xff0c;在日常客户支持过程中经常会有客户问到一些关于串口通讯稳定性的问题&#xff0c;比较典型的几个问题如下&#xff1a;在9600波特…

《统一沟通-微软-实战》-3-部署-Exchange 2010-1-先决条件

参照: http://technet.microsoft.com/zh-CN/library/bb691354.aspx 先决条件 加域请确保林的功能级别至少为 Windows Server 2003&#xff0c;并确保架构主机运行 Windows Server 2003 Service Pack 1 或更高版本。有关 Windows 功能级别的详细信息&#xff0c;请参阅管理域和林…

写给打工人的职业发展观

转发火哥的一篇文章为什么要去一线城市打工现在网上很多这样的话题&#xff1a;深圳的高房价会导致人才流失吗&#xff1f;年轻人是不是在逃离北上广&#xff1f;一线城市工资是老家省会的一倍&#xff0c;消费&#xff0c;房租也比老家省会贵一倍&#xff0c;赚多少花多少&…

在线MSN代码(如同QQ在线咨询那种的)

在你需要显示MSN咨询的地方添加如下代码&#xff1a; <!--Msn网页在线代码开始--><a href"msnim:chat?contactabcdwxc21com.com"><img height"40"alt"msn:abcdwxc21com.com"src"msn.GIF"width"26"align&quo…

RISC-V Linux 启动流程分析

“Author: 通天塔 985400330qq.comDate: 2022/05/15Revisor: lzufalcon falcontinylab.orgProject: RISC-V Linux 内核剖析”说明&#xff1a;RISC-V Linux 内核兴趣小组旨在围绕 RISC-V 处理器架构系统地研究 Linux 内核以及上下栈中的技术&#xff0c;为国内 RISC-V 生态…

解读设计模式----单例模式(Singleton Pattern)

单例模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点.在程序设计中,有很多情况需要确保一个类只能有一个实例.从这句话可以看出,Singleton模式的核心&#xff1a;如何控制用户使用new对一个类的实例构造器的任意调用。如何绕过常规的构造器&#xff0c;提供一…

Linux下如何搭建Java环境

软件环境 虚拟机&#xff1a;VMware Workstation系统&#xff1a;Linux&#xff1a;CentOS-7-x86_64工具&#xff1a; 安装工具&#xff1a;SSH客户端搭建步骤 1&#xff1a;查询当前系统版本 cat /proc/version2&#xff1a;首先确认当前系统是否已经存在java环境 java -vers…