Awk计算舍入为整数

问题描述 投票:0回答:2

我有一个计算,我需要将它输出为整数,但是它可能返回带小数的一个。

    echo $((ram/50)) | awk '{printf( "%.0f\n", $1*0.$1 )}'

因此,在这种情况下,ram / 50返回36,通过管道传送到awk。我希望awk将数字乘以0.数字本身,所以:36 * 0.36。这将返回12.96,我想将其四舍五入为13。如命令所示,36 * 0.36计算不起作用,并且printf仅删除.96,不会四舍五入。

awk
2个回答
1
投票

您的问题与运算符优先级有关。乘法比字符串连接具有更高的优先级,因此您需要一些括号才能使其按预期工作:

echo 36 | awk '{ printf "%.0f\n", $1 * ("0." $1) }'

在您的版本中,操作顺序表示您将字段1乘以0,然后与字段1串联,然后将结果传递给printf


0
投票

使用此:

echo $((ram/50)) | awk '{ v=$1*$1/100; print (v==int(v) ? v : int(v)+1) }'

实际计算在v=$1*$1/100中进行。然后在打印时,根据需要四舍五入到下一个整数。

© www.soinside.com 2019 - 2024. All rights reserved.