减去两个float变量并比较shell脚本

时间:2013-11-07 16:24:16

标签: shell unix floating-point sh

我有两个浮点变量,time和prev_time,我需要减去它们,并检查是否小于0.我在几十个论坛中查找过,但似乎无法找到有效的答案。我需要做类似的事情:

if [[ `expr $time-$prev_time | bc` -lt 0 ]]

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

从您使用[[ ... ]]开始,我假设您使用的是bash。如果您只关心差异小于0,那么您只关心$time小于$prev_time。您可以将浮点值拆分为整数部分,然后单独进行比较:

IFS=. read time_int time_frac <<< $time
IFS=. read prev_in prev_frac <<< $prev_time
if (( time_int < prev_int || (time_int == prev_int && time_frac < prev_frac) )); then

或者,您可以这样使用bc(另外,它符合POSIX标准):

if [ "$( echo "$time - $prev_time < 0" | bc )" = 1 ];
如果比较为真,则

bc输出1,如果为假,则输出0。