如何解决bash浮动值导致的错误?

时间:2015-09-09 05:02:39

标签: bash

echo -n "x1 = "
echo -e "scale=3\n0.5*(-($B)+sqrt($D))/($A)" | bc

是什么意思-n,-e和bc?

假设,

D=$(( ($B)*($B)-4*($A)*($C) ));
echo  D = $D
if [ $D -gt 0 ] ; then
then
    echo -n "x1 = "
    echo -e "scale=3\n0.5*(-($B)+sqrt($D))/($A)" | bc
    echo -n "x2 = "
    echo -e "scale=3\n0.5*(-($B)-sqrt($D))/($A)" | bc
fi

所以每当我给出一些浮动类型值。它显示错误。

1 个答案:

答案 0 :(得分:0)

如果您想进行更多研究,man - bashbc页面都可以使用这些内容。

echo内置bash命令的选项包括-n,它阻止在输出后输出换行符(因此表达式与文字{{1}在同一行上},而不是在下一行。)

x1 =选项允许它为换行符解释扩展字符,例如-e。这实际上是不必要的,因为\n也将分号理解为分隔符,所以你可能刚刚使用过:

bc

echo "scale=3; 0.5*(-($B)+sqrt($D))/($A)" | bc 而言,这是大多数类UNIX操作系统所包含的任意精度计算器。上面的命令被视为您已启动bc并实际输入文本bc,其中包含scale=3; 0.5*(-($B)+sqrt($D))/($A)B和{ {1}}变量替换为实际值。

D程序将解释该输出结果。

关于您使用浮点值获得的错误,因为该行:

A

bc解释,与D=$(( ($B)*($B)-4*($A)*($C) )) 不同,它不会使用浮点值进行计算 - 它只是严格整数。

要解决此问题,只需将二次解决方案的完整计算移动到bash,例如:

bc