bash中的浮点数计算

时间:2013-09-20 14:52:16

标签: bash math floating-point

我们安装了有限的Linux版本,其中没有安装awk和bc。

有脚本执行时间计算。

ms_date()
{
  date '+%s.%N' | sed 's/N$//'
}

stime=$(ms_date)    
#some code
etime=$(ms_date)
duration=$(echo ${etime} - ${stime} | bc)

如果bc和awk没有安装且无法使用,请您建议可以用于浮点数计算吗?

可以使用expr或sed吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

Bash无法处理浮点计算,但看起来你可以逃脱整数运算。只需消除小数和以纳秒为单位的计算结果。

duration=$(($etime - $stime))

答案 1 :(得分:0)

在必须显示之前不要使用小数:

ms_date () { date +%s%N; }
display_time () { 
    if [[ $1 =~ ^([0-9]*)([0-9]{9})$ ]]; then
        printf "%s.%s\n" ${BASH_REMATCH[1]} ${BASH_REMATCH[2]}
    fi
}

start=$(ms_date)
sleep 1
end=$(ms_date)
duration=$( display_time $((end - start)) )