【问题标题】:How to hide or delete the zero in my bash script?如何隐藏或删除我的 bash 脚本中的零?
【发布时间】:2013-05-15 15:13:05
【问题描述】:

这是我的脚本:

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

如果我为$bil1 输入9.5,为$bil2 输入300,则结果为2850.0。

我想要结果:

Your result : 9.5 * 300 = 2850

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

【问题讨论】:

    标签: regex bash variables math logic


    【解决方案1】:

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

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

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

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

    【讨论】:

    • @Vash2593 你在看哪个脚本?
    • @Vash2593 不,第五行的$bil1*$bil2目前没有被引用。
    【解决方案2】:

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

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

    【讨论】:

    • 如果要四舍五入到下一个整数,那可能是最好的解决方案;如果只想在句号之后删除多余的零(而不是其他数字),它不起作用。
    【解决方案3】:

    将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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 2021-01-31
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2019-09-21
      相关资源
      最近更新 更多