1

这是我的脚本:

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 ";

如果我输入9.5for$bil1300for $bil2,结果是2850.0

我想要结果:

Your result : 9.5 * 300 = 2850

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

4

3 回答 3

2

将以下部分添加到您的 sed 命令中(最后):

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

(删除一个点,最后是任意多个零。)

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

于 2013-05-15T15:18:58.497 回答
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 
于 2013-05-15T15:52:50.480 回答
1

使用 bash 的内置函数printf来控制输出

$ bil1=9.5; bil2=300; printf "%.0f\n" $(bc -l <<< "$bil1 * $bil2")
2850
于 2013-05-15T15:57:56.377 回答