【问题标题】:Bash floating points and negative valuesBash 浮点数和负值
【发布时间】:2013-01-19 01:31:36
【问题描述】:

您好,我正在尝试使用以下代码生成浮点精度

让 number1=0 number2=0 operator=+

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

代码在没有 printf 的情况下工作,但我不知道如何执行负 (-) 计算和浮点数?

【问题讨论】:

  • bash 变量是整数。 ksh 可以使用扩展为 typeset -lEfloat 别名声明浮点数。最好使用awk,因为它自然支持浮点数,或者如果你真的必须拥有bash,你可以将你的计算传递给bc(这是一个外部过程,在典型的循环结构中执行起来非常昂贵) ,但在此处搜索示例。如果您花时间阅读stackoverflow.com/faq,您将获得更好的帮助。如需 awk 帮助,请阅读 grymoire.com/Unix/Awk.html。祝你好运。

标签: bash shell unix sh


【解决方案1】:

Bash 不支持浮点计算,因此,您可以将正在运算的数字乘以所需数量的小数:

# 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 ))

【讨论】:

  • 感谢您的信息,但是需要结果来存储总和以进行交互 - printf "%0.2f\n" $(( number1 $operator number2 )) 不够
  • @TrickyDicky:你的问题没有说明这个要求。解决方案是res=$( printf "%0.2f\n" $(( n $o n2 )) )。祝你好运
【解决方案2】:

我终于明白了!

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

【讨论】:

  • result=$(echo "scale=4; $number1 $operator $number2 " | bc)
猜你喜欢
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2014-10-03
相关资源
最近更新 更多