如何从命令行将数字四舍五入为最接近的整数?

如何从命令行将数字四舍五入为最接近的整数?

我有一个文件

555.92 569.472 582.389 648.078 999.702 1040.75 1386.24 1418.47 1998.26 2182.13 2384.3

我需要像这样对每个数字进行舍入

556 569 582 

理想情况下,我不需要创建 tmp 文件。如何做?

答案1

通过printf函数运行文件的内容。

 $ xargs -a numbers.txt -n1 printf "%1.f "                                   
    556 569 582 648 1000 1041 1386 1418 1998 2182 2384 

此外,Ubuntu 还有一个不错的小程序,numfmt它允许将数字格式化为用户定义的标准,并且易于人类阅读。

例如,

$ xargs -a numbers.txt -n1 numfmt  --to=si --round=up | xargs echo 
556 570 583 649 1.0K 1.1K 1.4K 1.5K 2.0K 2.2K 2.4K

查看man numfmt了解更多信息。

答案2

bash只能处理整数运算。使用更强大的语言,例如 Perl:

perl -ane 'printf "%.0f ", $_ for @F' file
  • -n逐行读取输入
  • -a将每行按空格拆分到@F数组中
  • %.0f是小数点后为零位的流格式

答案3

另一个 Python 解决方案(一行代码)。在终端中运行:

python3 -c "[print(round(float(n))) for n in open('f').read().split()]"

'f'包含浮点数的源文件在哪里(位于单引号之间),例如:

python3 -c "[print(round(float(n))) for n in open('/home/jacob/Bureaublad/test').read().split()]"

输出:

556
569
582
648
1000
1041
1386
1418
1998
2182
2384

另一种输出方式

如果您希望将数字排成一行:

python3 -c "[print(round(float(n)), end=' ') for n in open('f').read().split()]"

(感谢@Oli!)

输出:

556 569 582 648 1000 1041 1386 1418 1998 2182 2384

解释

命令:

python3 -c "[print(round(float(n))) for n in open('f').read().split()]"

部分内容:

open('f').read().split()

读取文件'f',将其分割成浮点数(现在仍然是字符串)

round(float(n))

首先解释细绳 n作为浮动,发子弹将其转换为整数

[print(round(float(n))) for n in open('f').read().split()]

最后,生成打印命令,打印所有四舍五入的浮点数。

答案4

使用python

#!/usr/bin/env python2
with open('/path/to/file.txt') as f:
    for line in f:
        numbers = line.strip().split(' ')
        for num in numbers:
            print int(round(float(num))),
  • 该列表numbers将包含所有放在空格中的数字 ( line.rstrip().split(' '))

  • 然后我们使用round()函数对浮点数进行四舍五入

  • 由于输入存储为字符串,我们需要使用float()函数将其转换为浮点数

  • int()函数将打印丢弃小数点的数字,即仅保留整数部分

输出 :

556 569 582 648 1000 1041 1386 1418 1998 2182 2384

相关内容