我有一个计算,我需要它作为一个整数输出,但它可能会返回一个带有desimal的数字。
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,它将其四舍五入。< / p>
答案 0 :(得分:1)
您的问题与运营商优先级有关。乘法的优先级高于字符串连接,因此您需要一些括号才能使其按预期工作:
echo 36 | awk '{ printf "%.0f\n", $1 * ("0." $1) }'
在您的版本中,操作顺序意味着您将字段1乘以0,然后与字段1连接,然后将结果传递给printf
。
答案 1 :(得分:0)
使用此:
echo $((ram/50)) | awk '{ v=$1*$1/100; print (v==int(v) ? v : int(v)+1) }'
实际计算发生在v=$1*$1/100
。然后在打印时,如果需要,将四舍五入为下一个整数。