Bash 将整数向上、向下或最接近的百分之四舍五入
有一系列完整的正数,如Bash 将整数向上、向下或最接近的百分之四舍五入,bash,numbers,rounding,Bash,Numbers,Rounding,有一系列完整的正数,如 827818 6574762 685038 55326902 例如,我需要的是,将其四舍五入到数百,从而得到相应的结果 827800 6574700 685000 55326900 例如,许多关于如何使用Javascript将上百个、下百个或最接近百个的想法 Math.floor(number / 100) * 100; 但是在Bash中也可以这样做吗?现在还不完全清楚“在Bash中”是什么意思,但可能是以下之一: $ cat input 827818 657476
827818
6574762
685038
55326902
例如,我需要的是,将其四舍五入到数百,从而得到相应的结果
827800
6574700
685000
55326900
例如,许多关于如何使用Javascript将上百个、下百个或最接近百个的想法
Math.floor(number / 100) * 100;
但是在Bash中也可以这样做吗?现在还不完全清楚“在Bash中”是什么意思,但可能是以下之一:
$ cat input
827818
6574762
685038
55326902
$ awk '{printf "%d00\n", $0 / 100}' input
827800
6574700
685000
55326900
或者(如果所有值都大于100!):
读取x时;做回显“${x%[0-9][0-9]}00”;完成<输入
如果要处理值小于100的情况并处理负值,可以执行以下操作:
while read x; do if test "${x#-}" -gt 100; then echo "${x%[0-9][0-9]}00"; else echo 0; fi; done < input
读取x时;如果测试“${x#-}”-gt 100;然后回显“${x%[0-9][0-9]}00”;否则为0;fi;完成<输入
但几乎可以肯定的是,坚持使用awk
四舍五入到最接近的100,使用(数字+50)/100*100
。
您可以将每一行修改为该计算,然后通过bc
运行这些表达式来计算它们
sed 's|.*|(&+50)/100*100|' file | bc
预期输出包含一个小错误。根据您的描述,应该将
6574762
四舍五入为6574800
,而不是6574700
sed的/.$/00/”文件
?您可能需要澄清您想要做什么。。。截断所有数字(即用00
)替换最后两位数字。。。或者基于最后两位数字向上/向下取整(即>=50==向上取整/请弄清楚-如果单数sed's |.*(&+50)/100*100 |'88788785 | bc
)的命令行应该是什么语法?如果没有文件,可以使用here字符串:'s |.*(&+50)/100*100 |'如果单个数字作为变量,例如命令行number=6575675;awk'{printf”%d00\n',$0/100}'$number
-不起作用,但我觉得我的语法是错误的echo“$number”| awk'{printf”%d00\n“,$0/100}
或awk-vn=“$number”'BEGIN{printf d00\n”,n“,n/100;exit}“
THX!你的答案对我来说是最好的
sed 's|.*|(&+50)/100*100|' file | bc