问题描述
使用bash脚本编写我想要的简单示例:
#!/bin/bash
echo "Insert the price you want to calculate:"
read float
echo "This is the price without taxes:"
echo "scale=2; $float/1.18" |bc -l
read -p "Press any key to continue..."
bash scriptname.sh
假设价格是:48.86答案是:41.406779661(41.40实际上因为我使用的是scale=2;
)
我的问题是:我如何围绕第二个小数点以这种方式显示答案?:41.41
最佳解决方案
bash圆函数:
round()
{
echo $(printf %.$2f $(echo "scale=$2;(((10^$2)*$1)+0.5)/(10^$2)" | bc))
};
在您的代码示例中使用:
#!/bin/bash
# the function "round()" was taken from
# http://stempell.com/2009/08/rechnen-in-bash/
# the round function:
round()
{
echo $(printf %.$2f $(echo "scale=$2;(((10^$2)*$1)+0.5)/(10^$2)" | bc))
};
echo "Insert the price you want to calculate:"
read float
echo "This is the price without taxes:"
#echo "scale=2; $float/1.18" |bc -l
echo $(round $float/1.18 2);
read -p "Press any key to continue..."
祝你好运:o)
次佳解决方案
最简单的解决方案
printf %.2f $(echo "$float/1.18" | bc -l)
第三种解决方案
Bash /awk舍入:
echo "23.49" | awk '{printf("%d\n",$1 + 0.5)}'
如果你有python你可以使用这样的东西:
echo "4.678923" | python -c "print round(float(raw_input()))"
第四种方案
这是一个纯粹的bc解决方案。舍入规则:+/- 0.5,远离零。
把你想要的量表放在$ result_scale;你的数学应该是$ MATH在bc命令列表中的位置:
bc <<MATH
h=0
scale=0
/* the magnitude of the result scale */
t=(10 ^ $result_scale)
/* work with an extra digit */
scale=$result_scale + 1
/* your math into var: m */
m=($MATH)
/* rounding and output */
if (m < 0) h=-0.5
if (m > 0) h=0.5
a=(m * t + h)
scale=$result_scale
a / t
MATH
第五种方案
我知道这是一个老问题,但我有一个纯粹的’bc’解决方案没有’if’或分支:
#!/bin/sh
bcr()
{
echo "scale=$2+1;t=$1;scale-=1;(t*10^scale+((t>0)-(t<0))/2)/10^scale" | bc -l
}
像bcr '2/3' 5
或bcr '0.666666' 2
一样使用它 – > (表达式后跟比例)
这是可能的,因为在bc(如C /C++)中,它允许在计算中混合逻辑表达式。根据’t’的符号,表达式((t>0)-(t<0))/2)
将评估为+/- 0.5,因此使用正确的值进行舍入。