处理 Bash 中的浮点数
Handling Floating Point Number in Bash
有人可以协助我处理我在 bash 中需要的这个计算吗?
目前我有:
Size=$((IPS * DataPages / (1024 * 1024 * 1024) * 1.05))
但是我在尝试执行时遇到以下错误:
./buffer: line 20: IPS * DataPages / (1024 * 1024 * 1024) * 1.05: syntax error: invalid arithmetic operator (error token is ".05")
我愿意使用其他替代方法,例如 print 或 awk 甚至 bc,但我需要一些指导。
bash
不支持浮点运算。为此使用 bc
。要在 bc
中启用浮点运算,请传递 --mathlib
(或 -l
)选项:
IPS=2
DataPages=3
bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)"
要将其捕获到 shell 变量中,请使用进程替换:
...
Size=$(bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)")
(( ))
不支持浮点运算。使用 bc 或 awk。
使用 bc
Size=$( echo "scale=2; $IPS * $DataPages / (1024 * 1024 * 1024) * 1.05 " | bc )
# scale is for number of digits after the floating point
使用 awk
Size=$( awk -v ips="$IPS" -v dp="$DataPages" 'BEGIN{size=ips * dp/ (1024 * 1024 * 1024) * 1.05; printf "%0.02f",size}' )
有人可以协助我处理我在 bash 中需要的这个计算吗?
目前我有:
Size=$((IPS * DataPages / (1024 * 1024 * 1024) * 1.05))
但是我在尝试执行时遇到以下错误:
./buffer: line 20: IPS * DataPages / (1024 * 1024 * 1024) * 1.05: syntax error: invalid arithmetic operator (error token is ".05")
我愿意使用其他替代方法,例如 print 或 awk 甚至 bc,但我需要一些指导。
bash
不支持浮点运算。为此使用 bc
。要在 bc
中启用浮点运算,请传递 --mathlib
(或 -l
)选项:
IPS=2
DataPages=3
bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)"
要将其捕获到 shell 变量中,请使用进程替换:
...
Size=$(bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)")
(( ))
不支持浮点运算。使用 bc 或 awk。
使用 bc
Size=$( echo "scale=2; $IPS * $DataPages / (1024 * 1024 * 1024) * 1.05 " | bc )
# scale is for number of digits after the floating point
使用 awk
Size=$( awk -v ips="$IPS" -v dp="$DataPages" 'BEGIN{size=ips * dp/ (1024 * 1024 * 1024) * 1.05; printf "%0.02f",size}' )