2013-01-19 70 views
1

您好我正在特林产生使用以下代码击浮点和负值

设NUMBER1 = 0数字2 = flaoting点精度0运算符= +

printf "%0.2f\n" result=$((number1 $operator number2)) 

代码工作而不printf的但我无法弄清楚如何执行负( - )计算和浮点数?

+0

bash变量是整数。 ksh可以使用'float'别名来声明浮点数,该别名可以扩展为'typeset -lE'。更好的方法是使用'awk',因为它有自然的浮点支持,或者如果你真的必须有'bash',你可以将'calc'放到'bc'中(这是一个外部过程,在典型的循环结构中花费很大) ,但在这里搜索的例子。如果你花时间阅读http://stackoverflow.com/faq,你会得到更好的帮助。有关awk的帮助,请阅读http://www.grymoire.com/Unix/Awk.html。祝你好运。 – shellter

回答

1

击不支持浮点运算,所以,无论你乘的数字由许多零操作为小数你想:

# 10.321 - 123.01 
result=$((10321 - 123010)) 
echo ${result:0:-3}.${result:${#result} - 3} 

或者干脆使用另一种工具来做到这一点,像bc

echo "scale=2; 10.321 - 123.01" | bc 

此外,您使用的语法无效;你应该有:

printf "%0.2f\n" $((number1 $operator number2)) 
+0

感谢您的信息,但结果是需要存储的interation - 印刷品“%0.2f \ n”$((number1 $ operator number2))不足够 –

+1

@TrickyDicky:你的问题没有说明这个要求。解决方案是'res = $(printf“%0.2f \ n”$((n $ o n2)))''。祝你好运 – shellter

0

最后我想通了!

result=$(echo "scale=4; (($number1 $operator $number2))" | bc) 
+1

result = $(echo“scale = 4; $ number1 $ operator $ number2”| bc)< - 不需要括号 - 它们是多余的,因为没有操作顺序-MDAS--来覆盖。 $(())是一个bash构造。 –