【发布时间】:2019-02-01 00:44:13
【问题描述】:
在 linux bash 中,我只想获取给定数字的下一个整数,前提是它是浮点数。我试过了
count=$((${count%.*} + 1));
但是使用上面的代码,一直(即使数字不是浮点数),它都会给出下一个整数。
预期结果:
345.56 => 346
345.12 => 346
345 => 345
谁能帮我找到解决办法?
提前致谢。
【问题讨论】:
在 linux bash 中,我只想获取给定数字的下一个整数,前提是它是浮点数。我试过了
count=$((${count%.*} + 1));
但是使用上面的代码,一直(即使数字不是浮点数),它都会给出下一个整数。
预期结果:
345.56 => 346
345.12 => 346
345 => 345
谁能帮我找到解决办法?
提前致谢。
【问题讨论】:
你可以使用perl
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}")
【讨论】:
num=$(perl -e "use POSIX; print ceil($num)") 也可以。
perl v5.26.1 为我工作。究竟是什么问题?您是否收到与 366 不同的错误或输出?
在 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
【讨论】:
您必须测试是否存在点:
case $count in
*.*) count=$(( ${count%.*} + 1 )) ;;
*) : nothing to do
;;
esac
或
[[ $count == *.* ]] && count=$(( ${count%.*} + 1 ))
【讨论】: