【问题标题】:Bash, need to count variables, round to 2 and store to variable [duplicate]Bash,需要计算变量,舍入到2并存储到变量[重复]
【发布时间】:2023-03-08 05:45:01
【问题描述】:

我需要对变量进行计数,取整到 2 并存储到变量中。

例子:

我有来自数组 ${array[5]} 的变量和定义的增值税变量,我需要计算简单

( $vat * ${array[5]} + ${array[5]} )

并存储到可变价格。

我试过了:

vat = 0.21

pricevat=$(echo "$vat * ${array[5]}" + ${array[5]} | bc -l)
(( pricevat=$vat*${array[5]}+${array[5]}))

但没有任何效果:

line 48: ((: pricevat=0.21*0.233+0.233: syntax error: invalid arithmetic operator (error token is ".21*0.233+0.233"

你能帮帮我吗?问题出在哪里?什么是最好的解决方案。非常感谢。

S.

【问题讨论】:

  • ((...)) 不能做浮点运算,这是错误的根源。上一行工作正常。

标签: bash variables integer


【解决方案1】:

有可能(虽然,它不会四舍五入,而是截断到小数点后3位):

array=( ... ... ... ... ... 102.03 ... )
vat=0.21
pricevat=$(bc <<< "scale=3; (1+$vat)*${array[5]}")

诀窍是让bc 进行舍入,使用其特殊变量scale 设置为3。

【讨论】:

  • 您是否已经尝试过:mkfifo fifo;exec 7&gt; &gt;(exec stdbuf -i 0 -o 0 bc -l &gt;fifo);exec 6&lt;fifo ;rm fifo 然后echo &gt;&amp;7 "scale=3;(1+$vat)*${array[5]}";read -u 6 -t .01 result...所以您可以使用FD7 和FD6 进行许多操作(只要您不更改,请保持scale=3他们;)...
【解决方案2】:

是的,它正在工作!我是这样做的。

算术运算:

pricevat=$(echo "$vat * ${array[5]}" + ${array[5]} | bc -l)

四舍五入:

pricevat=$(printf "%0.3f\n" $pricevat)

如果有其他方法可以做得更好或在一条线上一起做,请告诉我。

谢谢。

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2020-10-08
    • 1970-01-01
    • 2015-01-28
    • 2012-06-01
    • 2021-11-19
    • 2018-06-23
    • 2011-12-09
    相关资源
    最近更新 更多