【问题标题】:Ceil only floating point numbers in bash linuxbash linux中的Ceil仅浮点数
【发布时间】:2019-02-01 00:44:13
【问题描述】:

在 linux bash 中,我只想获取给定数字的下一个整数,前提是它是浮点数。我试过了

count=$((${count%.*} + 1));

但是使用上面的代码,一直(即使数字不是浮点数),它都会给出下一个整数。

预期结果:

345.56 => 346
345.12 => 346
345 => 345

谁能帮我找到解决办法?

提前致谢。

【问题讨论】:

    标签: linux bash ceil


    【解决方案1】:

    你可以使用

    NUMBER=365
    perl -w -e "use POSIX; print ceil($NUMBER/1.0), qq{\n}"
    

    用于分配给变量

    MYVAR=$(perl -w -e "use POSIX; print ceil($NUMBER/1.0), qq{\n}")
    

    【讨论】:

    • 对不起,我误读了预期的输出。我改变了我的代码。顺便说一句,对这个答案投反对票有点奇怪。你最终使用了这种方法。请至少接受它作为答案,以便其他人也可以使用它。谢谢
    • @Simonare .. 谢谢。它为我工作。不打印如何将值分配给变量?
    • 比需要的时间长一点。只需num=$(perl -e "use POSIX; print ceil($num)") 也可以。
    • 在 Ubuntu 18.04 上使用 perl v5.26.1 为我工作。究竟是什么问题?您是否收到与 366 不同的错误或输出?
    【解决方案2】:

    在 awk 中。部分测试记录:

    $ cat file    # dont worry about stuff after =>
    345.56 => 346
    345.12 => 346
    345 => 345
    345.0
    0 
    -345.56 => 346
    -345.12 => 346
    -345 => 345
    -345.0
    

    awk:

    $ awk '{print $1 " => " int($1)+($1!=int($1)&&$1>0)}' file
    345.56 => 346
    345.12 => 346
    345 => 345
    345.0 => 345
    0 => 0
    -345.56 => -345
    -345.12 => -345
    -345 => -345
    -345.0 => -345
    

    【讨论】:

      【解决方案3】:

      您必须测试是否存在点:

      case $count in
          *.*) count=$(( ${count%.*} + 1 )) ;;
            *) : nothing to do
               ;;
      esac
      

      [[ $count == *.* ]] && count=$(( ${count%.*} + 1 ))
      

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多