2013-05-15 58 views
1

这是我的脚本:如何隐藏或删除我的bash脚本中的零?

echo -n "number 1 :"; 
read bil1 
echo -n "number 2 :"; 
read bil2 
multiple=$(echo $bil1*$bil2 |bc -l |sed -e 's/^\./0./' -e 's/^-\./-0./'); 
echo " Your result : $bil1 * $bil2 = $multiple "; 

如果我为$bil1300$bil2输入9.5,结果是2850.0

我想要的结果:

Your result : 9.5 * 300 = 2850 

如何隐藏或结果的末尾加上零?即只显示2850

回答

2

以下部分添加到您的sed命令(末):

-e 's/\.0*$//' 

(删除一个点,然后任意多的零,在不受任何结束。)

顺便说一句,你最好用echo "$bil1*$bil2"代替echo $bil1*$bil2,否则根据当前目录的内容你可能会得到奇怪的效果。

+1

它已经在脚本中引用 – Vash2593

+0

@ Vash2593你在看哪个脚本? –

+0

@ Vash2593不,第五行中的'$ bil1 * $ bil2'目前未被引用。 – Uwe

1

指定的bc正常,浮点输出到可变,然后使用参数扩展修剪:

multiple=$(echo "$bil1*$bil2" | bc -l) 
# Not POSIX, unfortunately 
shopt -s extglob 
multiple=${multiple%.+(0)} 
echo " Your result : $bil1 * $bil2 = $multiple " 

甲POSIX的解决方案是让printf做的工作

multiple=$(echo "$bil1*$bil2" | bc -l) 
printf " Your result : %1.1f * %d = %1.0f\n" $bil1 $bil2 $multiple 
+0

如果每次我犯这个错误,我都有一分钱...... – chepner

1

使用bash内置printf控制输出

$ bil1=9.5; bil2=300; printf "%.0f\n" $(bc -l <<< "$bil1 * $bil2") 
2850 
+0

如果想要舍入到下一个整数,那可能是最好的解决方案;如果一个人只想在这段时间后删除多余的_zeroes_(但不是其他数字),它就不起作用。 – Uwe