我有这段代码,我从第三行获得(standard_in) 1: syntax error
:
valueInFloat=printf "%.2g" $temp
tempFloat=printf "%.1f" $value2
compare_result=`echo "$tempFloat < $valueInFloat" |bc -l`
if [[ -z $compare_result ]]
then ...
我正在尝试在bash
中进行浮点值比较。
请注意,如果我注释掉第三行并放入compare_result=0
,则错误就会消失。
答案 0 :(得分:2)
在某些情况下,printf
可以生成bc
无法识别的浮点值。具体来说,如:
pax> printf "%.2g\n" 42456456457357357
4.2e+16
pax> echo '4.2e+16 > 1.0' | bc -l
(standard_in) 1: syntax error
我建议你坚持使用%f
变体。它将始终根据ISO C标准生成[−]999.999
形式,bc
将毫无困难(除非您开始进入无穷大或NaN)。 %g
变体生成该格式或%e
格式[−]9.999e±99
,具体取决于请求的值和精度。
另外,你的测试是错误的。如果字符串为空,则-z
测试将为true,并且您的字符串将为1
或0
,具体取决于比较结果。一个更好的测试是(假设你想在测试是肯定的时候休息:
if [[ ${compare_result} -eq 1 ]]
答案 1 :(得分:1)
$tempFloat
或$valueInFloat
中的任何一个都没有价值。