[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20170617]vim中使用bc計算器.txt
- [20170616]vim中使用bc計算器.txt
- 關於vue的使用計算屬性VS使用計算方法的問題Vue
- [20170308]bc做xor(異或)計算.txt
- 在vim中使用bc進行算術計算
- AIX下的小計算器 bcAI
- 使用並查集解決的相關問題並查集
- [20180413]熱備模式相關問題.txt模式
- Oracle關於week的計算問題Oracle
- 關於日期計算的問題 (轉)
- 在 dubbo 中使用 Threadlocal 的相關問題thread
- pycharm+python使用中的相關問題PyCharmPython
- [20171215]關於md5sum的計算的小問題.txt
- [20121207]vim中使用bc做10與16進位制計算.txt
- [20230428]bash實現xor計算.txt
- Docker 相關問題Docker
- django相關問題Django
- electron相關問題
- Oracle MTS的相關問題Oracle
- 計算兩列的相關性
- 關於盒模型相關的問題模型
- [20211009]使用bash計算sql語句的sql_id.txtSQL
- bc : 一個命令列計算器命令列
- [20180413]熱備模式相關問題2.txt模式
- [20191010]bash行計算器.txt
- [20240313]toad gather_plan_statistics執行計劃相關問題.txt
- 基於關鍵詞及問題主題的問題相似度計算
- java語言相關的問題Java
- 面試遇到的redis相關問題面試Redis
- Java相關問題整理Java
- PHP相關問題集合PHP
- 大模型相關問題大模型
- 偏相關係數計算
- 工具bc:一個命令列計算器命令列
- 解決使用Git Bash亂碼問題Git
- [20191012]使用bash從sql_id計算hash_value.txtSQL
- 關於表資料行統計的問題和相關誤區
- 雲端計算存在的安全問題及相應七條罪狀