如何在bash脚本中从十进制转换为整数数字变量?

时间:2014-12-08 11:27:49

标签: bash shell integer

我有一个如下所示的值:26.3

我想处理这个值,但我需要它是整数,所以有一个简单的方法吗?

26.3 -> 26
44.9 -> 44

由于

4 个答案:

答案 0 :(得分:2)

一种选择是使用awk:

$ var=26.3
$ awk -v v="$var" 'BEGIN{printf "%d", v}'
26

%d格式说明符仅导致打印数字的整数部分,将其四舍五入。

正如Mark在his answer中提到的,如果没有前导数字,例如.9,则简单替换会失败,而此方法将打印0

也可以在awk中使用int函数,而不是使用格式说明符。变量可以在标准输入上传递,而不是定义变量以缩短变量:

$ awk '{$0=int($0)}1' <<< "44.9"
44

如果您不熟悉awk,最后的1是常用的简写,总是评估为true,因此awk执行默认操作,即打印该行。 $0是一个引用该行内容的变量。

感谢Jidder提出建议。

答案 1 :(得分:2)

您可以使用替换来替换点及其后面的任何内容:

v=26.3
s=${v/\.*/}
echo $s
26

它会截断而不是决定绕哪个方向...虽然.63可能很有趣:-(而0.63会很好。

答案 2 :(得分:1)

这是一个使用bc执行上一个int的上限的版本:

n='26.3'
bc <<< "$n/1"
26

n='26.6'
bc <<< "$n/1"
26

答案 3 :(得分:0)

您似乎只想放弃小数部分:

x=26.3
x=${x%.*}

这在shell中处理,无需运行任何外部程序。