Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将整数向上、向下或最接近的百分之四舍五入_Bash_Numbers_Rounding - Fatal编程技术网

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