shell指令碼中浮點數運算

2021-10-05 14:24:42 字數 1292 閱讀 2115

a=1

b=2result=$(printf "%.2f" `echo "scale=2; $a/$b"|bc`)

echo $result

輸出結果: 0.50

參考:

shell指令碼中浮點數運算

最近寫了個shell指令碼,檢視運算結果時發現,結果值沒有小數點。

怎麼回事?

原來shell中的運算都是整數運算。那怎麼把小數點搞出來,用這個方法:

[root@***]$ echo "scale=2;  10/3" | bc

3.33

這裡scale=2,表示小數點後取2位,如果不加scale,預設為0,不要小數點:

[root@***]$ echo "10/3" | bc          

3這裡|bc是為了完成運算的,和expr的意思有點像,如果不加|bc,就是直接列印:

[[email protected] /home/liurong]$ echo "scale=2;  10/3"

scale=2;  10/3

在指令碼裡,可以把上述運算結果放在變數中:

[root@***]$ export c=$(echo "scale=2;  10/3" | bc)

[root@***]$ echo $c

3.33

#!/bin/bash

#方法1

res1=$(printf "%.2f" `echo "scale=2;1/3"|bc`)

res2=$(printf "%.2f" `echo "scale=2;5/3"|bc`)

#方法2

#v=$(echo $big $small | awk '')

v1=$(echo 1 3 | awk '')

v2=$(echo 5 3 | awk '')

#方法3

mem1=`echo "scale=2; a=1/3; if (length(a)==scale(a)) print 0;print a "|bc`

mem2=`echo "scale=2; a=5/3; if (length(a)==scale(a)) print 0;print a "|bc`

echo res1 is $res1

echo res2 is $res2

echo v1 is $v1

echo v2 is $v2

echo mem1 is $mem1

echo mem2 is $mem2

Shell浮點數運算

shell本身不支援浮點數運算,之類的數 算符只能進行整數運算。要想在shell中運算浮點數,只能借助於bc,awk或者perl。如 a 0.1 b 0.2 c echo a b bc l 或者perl e print stdout a b 需要注意的是,如果數學表示式中有負數,則必須確保運算子 與...

浮點數運算

浮點數運算的公式 n m re n代表浮點數 m代表尾數 r代表基數 e代表指數 所謂浮點數就是類似我們高中學的科學計數法 比如 1000 就表示為 1.0 103 那麼浮點型計算就是兩個用科學計數法表示的數之間進行的計算 例如 1.0 102 1.19 103 該如何計算 步驟 1.對階 所謂對階...

浮點數運算

今天學習了浮點數運算 加減乘除 浮點數運算主要包括兩部分 指數運算和尾數運算。在ieee754標準下,指數運算就是階碼的運算,類似於無符號數運算。尾數運算是原碼運算。之前一直很疑惑為什麼前面的教材在介紹原碼運算 加減乘除 所舉的例子都是小數運算。現在猜想那部分內容可能只是為了浮點數運算做鋪墊,這裡才...