首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash中的加法与使用bc的decimal

bash中的加法与使用bc的decimal
EN

Stack Overflow用户
提问于 2021-03-24 06:27:48
回答 1查看 85关注 0票数 1

我是bash的新手,我想知道为什么我的脚本不能按照我希望的方式工作。

我有这个bash脚本:

代码语言:javascript
复制
#!/bin/bash

read n

var=($(cat))

bim=${var[*]}

toto=$(echo $bim | sed 's/ /+/g' | bc)

echo $toto

bobo=$(($toto/$n | bc -l))

echo $bobo | awk '{printf "%.3f\n", $1}'

这应该是将"cat“存储在数组中的所有值相加,并将总数除以"read”读取的第一个值。并且结果应该返回三位小数的小数值。但是,当我使用bc -l时,它只向我返回一个舍入数字!当我使用awk '{printf% .3f ", $ 1}'时,它会打印.000

你知道为什么吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 06:59:10

bash只做整数运算和算术扩展

代码语言:javascript
复制
bobo=$(($toto/$n | bc -l))

不会像你想的那样做。| bc -l中的管道标志不是管道标志。这是一个按位的OR。细分:

  • $toto被解释为变量(就像toto)
  • $n被解释为变量一样(正如n)
  • |是按位的一样) OR
  • bc被解释为变量(其值0)
  • -被解释为减号(在算术中,expression)
  • l被解释为变量(其值为0)

因此,它变成了与整数除法toto/n相同的$toto/$n | 0 -0 (在算术展开中,变量不需要$)。

您也可以使用bc来划分,但您需要在bc中设置scale。下面是一个在执行除法之前将其设置为3的示例:

代码语言:javascript
复制
bobo=$(echo "scale=3;$toto/$n" | bc)

请注意,您不需要通过awk对此进行echo。只要使用echo $bobo,你就会得到你想要的结果。

示例输入:

代码语言:javascript
复制
3
11.3
9
8

应用建议的更改后的输出:

代码语言:javascript
复制
28.3
9.433
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66772192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档