[20190929]bash使用bc計算的相關問題.txt
[20190929]bash使用bc計算的相關問題.txt
--//快放假沒什麼事情,使用bash寫一些小程式,轉化number到oracle number編碼,使用bc計算功能,發現一些小問題
--//做一些記錄:
1.bc顯示小數點前的0:
$ echo "scale=3; 1/3" | bc
.333
--//很明顯如果結果是0.xxxxx,bc的計算結果前面的0不顯示。
--//可以在網上找到一些方法:
res1=$(printf "%.2f" `echo "scale=2;1/3"|bc`)
--//另外bc是高精度的計算器,可能小數點位數很多,上面的printf不行。
--//可以採用連線的方式,僅僅先判斷第一個字元是否是"."就ok了(當然時正數的情況下)。
2.四捨五入問題:
# echo "scale=3; 2/3" | bc
.666
--//運算不做四捨五入。
3.scale設定無效的問題:
# echo "scale=0 ; (0.01+193)" | bc
193.01
--//我想取整,結果輸出193.01.導致設定scale=0無效,似乎+,-,*運算都不起作用,僅僅/可以控制這種行為。
# echo "scale=0 ; (0.01+193)*1" | bc
193.01
# echo "scale=0 ; (0.01+193)/1" | bc
193
4.輸出折行問題。
# echo 2^250 | bc
18092513943330655534932966407607485602073435104006338131165247501236\
42650624
--//如果計算超過68個字元,會出現折行情況,當然這是正常的,加入tr過濾ok。
# echo 2^250 | bc | tr -d '\n\\\r'
--//另外我在window下使用cygwin ,輸出裡面有"\r"字元.透過例子說明:
$ cat aa.sh
#! /bin/bash
set -x
a=$(echo 5+4 | bc )
echo "$a"
echo $a
set +x
$ ./aa.sh
++ echo 5+4
++ bc
+ a=$'9\r'
+ echo $'9\r'
9
+ echo $'9\r'
9
+ set +x
--//你可以發現在windows下bc的輸出多了1個\r字元.必須過濾掉.估計linux下沒有這個問題.
--//另外注意一個小問題,就是要儲存檔案格式為unix的檔案格式.
5.計算精度問題:
# echo "l(.99999999999999999999)/l(100)" | bc -l
0
--//bc -l 預設的scale=12,必須改變scale設定。
# echo "scale=66;l(.99999999999999999999)/l(100)" | bc -l
-.000000000000000000002171472409516259138266501956630606707163335634
--//有一些情況即使設定很高精度反而出現問題,例子:
> bc -l
scale=180
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(100)
-65.0000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000248123508996454719162468354
--//這個正常輸出-65.
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
0000000000000000000000496247017992909438324936737
scale=20
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.00000000000000000044
scale=10
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.0000000052
scale=4
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.0047
--//當你限制scale過小時,反而誤差更大。
scale=400
l(0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)/l(10)
-130.000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000171086395582297672322451960
6.bc不支援科學計數法(科學計數法):
# echo "1e2" | bc
(standard_in) 1: parse error
7.另外我發現bash程式設計能不用bc儘量不用,能不載入math庫,儘量不要載入。
--//最後我發現我寫出來的轉化程式number到oracle number編碼執行不是很快,我是在windows下使用cygwin除錯的。基本上轉化1個大
--//約接近2秒,我只能考慮別的方式儘可能減少bc使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2658886/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20191202]關於hugepages相關問題.txt
- [20191010]bash行計算器.txt
- [20231029]使用cygwin調式bash shell引出的問題.txt
- [20211009]使用bash計算sql語句的sql_id.txtSQL
- [20190108]rlwrap sqlplus tee相關問題.txtSQL
- [20180413]熱備模式相關問題.txt模式
- [20230428]bash實現xor計算.txt
- [20230310]nc reverse bash shell問題.txt
- [20201210]11G ACS相關問題.txt
- [20191012]使用bash從sql_id計算hash_value.txtSQL
- [20181229]bash shell的算術運算 .txt
- [20240313]toad gather_plan_statistics執行計劃相關問題.txt
- [20190419]bash單雙引號問題.txt
- [20190110]rlwrap sqlplus tee相關問題3.txtSQL
- [20180413]熱備模式相關問題2.txt模式
- [20191220]關於共享記憶體段相關問題.txt記憶體
- [20221111]bash eval設定變數問題.txt變數
- [20210126]bash ln建立軟連結問題.txt
- [20230306]學習UNIFIED audit--dg相關問題.txtNifi
- [20231109]bash shell快捷鍵alt+number的問題.txt
- [20231102]除錯bash shell指令碼遇到的問題.txt除錯指令碼
- [20210107]編寫bash shell指令碼遇到的問題.txt指令碼
- 在 dubbo 中使用 Threadlocal 的相關問題thread
- pycharm+python使用中的相關問題PyCharmPython
- 使用並查集解決的相關問題並查集
- [20190412]bash顯示日期相減.txt
- [20191223]關於共享記憶體段相關問題3.txt記憶體
- [20191011]通過bash計算sql語句的sql_id.txtSQL
- [20201109]bash shell特殊算術方式.txt
- [20191129]關於hugepages的問題.txt
- octomap相關問題
- django相關問題Django
- electron相關問題
- Docker 相關問題Docker
- [20210910]table scan相關統計.txt
- [20221104]bash exec使用技巧.txt
- [20181227]bbed的使用問題.txt
- 關於盒模型相關的問題模型