日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于bc中小数点length,scale,(())以及进制转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

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

在這里因?yàn)椴恢佬?shù)點(diǎn)的處理辦法,所以用了看起來很愚笨的cut來切割,直到通過后可以看到其他人的答案。有一種寫法,里面解決了很多小數(shù)點(diǎn)的問題,所以我記錄了下來,如下:

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、顯示小數(shù)點(diǎn)后的位數(shù):

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

    ? 他是會識別后面的0的哪怕無意義。

  length是計(jì)算數(shù)值長度的另一個參數(shù),他會計(jì)算小數(shù)點(diǎn)前后所有的位數(shù),但是有個地方需要注意,當(dāng)這個小數(shù)點(diǎn)前只有一個0的時(shí)候,它是不計(jì)算這個0的

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

?

    2、截取小數(shù)點(diǎn)的位數(shù):  

[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有絕對的關(guān)系,沒有這個格式會導(dǎo)致scale無效,無論是加減法,或者乘法,經(jīng)過測試以后發(fā)現(xiàn)最后的一步計(jì)算都必須以除法結(jié)尾,最簡單的就是/1了,當(dāng)然本來最后一步就是除法就可以忽略了。

?

利用bc進(jìn)行大小比較
    echo "1>2"|bc
  這里一定一定要注意的是,這個比較結(jié)果就是0或1,而不是代表true或false,因而不能用于if后的條件判斷!切記切記
  但是在添加(())以后可以進(jìn)行比較判斷。注意看他們的結(jié)果,在添加了(())后,對表達(dá)式進(jìn)行了真假判斷

[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還可以方便快捷的進(jìn)行進(jìn)制轉(zhuǎn)換:

  標(biāo)準(zhǔn)格式: echo "obase=2;ibase=16;FFFF" | bc ,obase表示輸出的進(jìn)制,ibase表示輸入的進(jìn)制,默認(rèn)輸入10位,所以也有簡寫為:echo "obase=2;123"|bc ,表示為輸入10進(jìn)制123,輸出2進(jìn)制

  但是有一個地方需要特別注意,格式中obase必須在前,ibase在后,否則會有計(jì)算錯誤,如下

?

[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

?

  

?

轉(zhuǎn)載于:https://www.cnblogs.com/tony3154/p/10126397.html

總結(jié)

以上是生活随笔為你收集整理的关于bc中小数点length,scale,(())以及进制转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。