【问题标题】:decimal value is not printing in bash?十进制值不在bash中打印?
【发布时间】:2018-05-04 05:08:17
【问题描述】:

我想评估表达式并显示正确的输出到小数点后 3 位我尝试使用下面的代码但它不起作用帮助我如何在 bash 中做到这一点。

echo -e "Enter expression to calculate : \c"
read num
let a=num
printf '%f\n' "$a"

Input :  5+50*3/20 + (19*2)/7

Output :  17.000000

Desired Output : 17.929

【问题讨论】:

  • bash 只能用整数计算,结果只有整数。
  • @Vijay :补充一下 Cyrus 的正确说法:你必须使用 bash 来完成你的任务吗?如果你改用 Zsh,你就会有浮点数。
  • Korn (ksh) shell 也支持浮点数,我一直不明白为什么 bash 不支持。
  • 我一直不明白为什么需要浮点运算的人会想到 bash 等人。首先是合适的。它们旨在促进运行其他程序,而不是自己执行计算。

标签: linux bash shell awk


【解决方案1】:

bc:

echo 'scale=3; 5+50*3/20 + (19*2)/7' | bc -l

输出:

17.928

【讨论】:

    【解决方案2】:

    您可以代替let a=num,例如:

    echo $num | bc 
    17.92857142857142857142
    

    【讨论】:

      【解决方案3】:

      这是一种非常罕见的情况,可以让 shell 变量扩展成为 awk 脚本主体的一部分:

      $ num='5+50*3/20 + (19*2)/7'
      
      $ awk 'BEGIN{print '"$num"'}'
      17.9286
      
      $ awk 'BEGIN{printf "%0.3f\n", '"$num"'}'
      17.929
      

      【讨论】:

      • 好主意。
      猜你喜欢
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多