zoukankan      html  css  js  c++  java
  • LINUX任意精度计算器BC用法

    【用途说明】
    Bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。手册页上说bc是An arbitrary precision calculator language,即一个任意精度的计算语言,注意是一种语言,它提供了一些语法结构,比如条件判断、循环等,可以说是很强大的,但是我在实际中还没有找到需要这个用途的场合 。另外一个用途就是用来进行进制转换。
    【常用参数】
    一般情况下,我们使用不带任何参数的bc命令:
    bc
    如果需要bc不输出提示信息,可以加上-q参数:
    bc -q
    如果要使用强大的数学库,比如计算三角函数,需要加上-l参数:
    bc -l
    因为bc本身是一个命令解释器,要退出它只要直接输入quit回车或者按Ctrl+D终止。
    【使用示例】
    示例一 命令行方式使用bc
    [root@localhost centos39]# bc
    bc 1.06
    Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'.
    3+4
    7
    3-4
    -1
    3*4
    12
    3/4
    0
    scale=2;3/4      # 保留小数点精度只对除法、取余、乘幂有效
    .75
    3/4
    .75
    3%4
    0
    scale=0
    3%4
    3
    3^4
    81
    Ctrl+D
    [root@localhost centos39]#
    示例二 通过管道使用bc来计算
    [root@localhost centos39]# echo 3 * 4 | bc
    (standard_in) 1: parse error
    [root@localhost centos39]# echo "3 * 4" | bc
    12
    [root@localhost centos39]# echo "scale=7; 355/113" | bc
    3.1415929

    [root@localhost centos39]#


    这种方式下还可以用于浮点数据类型的大小比较:

    a=1.2

    b=3.2

    c=`echo "$a < $b" | bc`

    echo "$c"


    以上脚本执行结果是1,而如果比较的结果是不满足的(比如将上面的$a < $b改为$a > $b),输出结果就是0。

    注意:这里一定一定要注意的是,这个比较结果就是0或1,而不是代表true或false,因而不能用于if后的条件判断!切记切记!


    示例三 进制转换
    [root@rhel55 ~]# echo "ibase=16; FFFF" | bc
    65535
    [root@rhel55 ~]# echo "obase=16; 1000" | bc
    3E8
    [root@rhel55 ~]#
     
     
    我们用到bc的ibase和obase方法。
     
      ibase是输入数字的进制,而obase就是输出数字的进制了。很好记,i是input,o是output。
     
      如果用一条命令来转数字,可以用echo命令和管道结合bc。如下:
     
      10进制转2进制:
     
      $ echo "obase=2;ibase=10;100" | bc1100100
     
      10进制转16进制:
     
      $ echo "obase=16;ibase=10;100" | bc64
     
      16进制转10进制:
     
      $ echo "ibase=16;obase=2;F1" | bc11110001
     
      注意,16进制数字的F要大写,如果小写结果是不对的。像最上面没有指定的时候,默认是10进制。
    示例四 将多个表达式写在一个文件中一起计算
    [root@rhel55 ~]# cat test.bc
    123*321
    123/321
    scale=4;123/321
     
    [root@rhel55 ~]# bc test.bc
    bc 1.06
    Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'.
    39483
    0
    .3831
    Ctrl+D
    [root@rhel55 ~]#
    [root@rhel55 ~]# cat test.bc | bc
    39483
    0
    .3831
    [root@rhel55 ~]#
    示例五 一个计算三角形面积的Bash脚本
    先复习一下初中的知识:b表示三角形的底,h表示三角形的高,那么三角形的面积计算公式是b*h/2 。
     
    文件 :area_of_triangle.sh
    Bash代码 
    #!/bin/bash 
      
    # Shell program/script to read the base and height of a traingle and find its area 
    # ------------------------------------------------------------------------- 
    # Copyright (c) 2005 nixCraft project <http://cyberciti.biz/fb/> 
    # This script is licensed under GNU GPL version 2.0 or above 
    # ------------------------------------------------------------------------- 
    # This script is part of nixCraft shell script collection (NSSC) 
    # Visit http://bash.cyberciti.biz/ for more information. 
    # ------------------------------------------------------------------------- 
    # Formula info: http://www.mste.uiuc.edu/dildine/heron/triarea.html 
    # Area=(1/2) x Base x Height 
     
    echo -n "Enter base of a triangle : " 
    read b 
     
    echo -n "Enter height of a triangle : " 
    read h 
     
    # calculate it and display back 
    area=$(echo "scale=2;(1/2) * $b * $h"|bc) 
    echo "Area of a triangle is $area" 
      
     
    [root@smsgw academic]# ./area_of_triangle.sh
    Enter base of a triangle : 123
    Enter height of a triangle : 321
    Area of a triangle is 19741.50
    [root@smsgw academic]#
     示例六 使用bc命令的脚本片段
    Bash代码 
    # usage: calc_sum <num1> <num2> 
    # 计算两个数的和 
    calc_sum() 

    bc -q <<EOF 
    $1+$2 
    EOF 

     
    # usage: calc_free <count> 
    # 计算费用,单价0.05元 
    calc_fee() 

    bc -q <<EOF 
    0.05*$1 
    EOF 

       
     
    将以上代码粘贴到终端。
    [root@web ~]# # usage: calc_sum <num1> <num2>
    [root@web ~]# # 计算两个数的和
    [root@web ~]# calc_sum()
    > {
    > bc -q <<EOF
    > $1+$2
    > EOF
    > }
    [root@web ~]#
    [root@web ~]# # usage: calc_free <count>
    [root@web ~]# # 计算费用,单价0.05元
    [root@web ~]# calc_fee()
    > {
    > bc -q <<EOF
    > 0.05*$1
    > EOF
    > }
    [root@web ~]#
    [root@web ~]#
    [root@web ~]# calc_sum 123 321
    444
    [root@web ~]# calc_fee 1000
    50.00
    [root@web ~]#
    示例七 使用数学库
    有文章称可以计算100位的圆周率pi值。
    [root@web ~]# echo "scale=100; a(1)*4" | bc
    Runtime error (func=(main), adr=11): Function a not defined.
    [root@web ~]# echo "scale=100; a(1)*4" | bc -l
    3.141592653589793238462643383279502884197169399375105820974944592307
    8164062862089986280348253421170676
    [root@web ~]#
  • 相关阅读:
    二叉树【基础算法题】
    大话数据结构笔记——第五章 串
    大话数据结构笔记——第四章 栈与队列
    矩阵【基础算法题】
    大话数据结构笔记——第三章 线性表
    十大经典排序算法(Javascript版)
    比较器
    荷兰国旗问题
    好听的字
    mongodb 命令
  • 原文地址:https://www.cnblogs.com/huangmr0811/p/5571060.html
Copyright © 2011-2022 走看看