linux + ksh +舍入或舍入 – 浮点数

在我的ksh脚本中,我只需要计算整数

有时我会得到浮点数如3.49或4.8等

所以我需要根据以下规则将浮点数转换为整数数字(示例)

3.49 will be 3 2.9 will be 3 4.1 will be 4 23.51 will be 24 982.4999 will be 982 10.5 will be 11 ( this example if float is .5 then it will roundup ) 

请build议如何在ksh或awkperl中执行此操作

要么

任何其他语言,可以运行在我的ksh脚本

在简短的Google会话之后,我发现printf似乎能够完成这项工作,至少在bash中(找不到一个能够做ksh的在线解释器)。

 printf "%0.f\n" 4.51 5 printf "%0.f\n" 4.49 4 

代码位于: http : //ideone.com/nEFYF

注意:perl可能是矫枉过正的,就像Marius说的,但是这里有一个perl的方法:

perl模块Math :: Round似乎处理这个工作。

一内胆:

 perl -MMath::Round -we 'print round $ARGV[0]' 12.49 

脚本:

 use v5.10; use Math::Round; my @list = (3.49, 2.9, 4.1, 23.51, 982.4999); say round $_ for @list; 

脚本输出:

 3 3 4 24 982 

awk ,可以使用int()函数截断浮点数的值,使其成为整数。

 [jaypal:~/Temp] cat f 3.49 will be 3 2.9 will be 3 4.1 will be 4 23.51 will be 24 982.4999 will be 982 [jaypal:~/Temp] awk '{x=int($1); print $0,x}' f 3.49 will be 3 3 2.9 will be 3 2 4.1 will be 4 4 23.51 will be 24 23 982.4999 will be 982 982 

为了完成你可以做这样的事情 –

 [jaypal:~/Temp] awk '{x=$1+0.5; y=int(x); print $0,y}' f 3.49 will be 3 3 2.9 will be 3 3 4.1 will be 4 4 23.51 will be 24 24 982.4999 will be 982 982 

注意:我不确定你想如何处理numbers like 2.5这样的numbers like 2.5 。 上述方法将3 for 2.5返回3 for 2.5

非整数数学的ksh版本可能有floor(),trunc()和round()函数。 不能检查他们全部,但至少在我的Mac(狮子),我得到这个:

 $ y=3.49 $ print $(( round(y) )) 3 $ y=3.51 $ print $(( round(y) )) 4 $ (( p = round(y) )) $ print $p 4 $ 

在perl中, my $i = int($f+0.5); 。 在其他方面应该类似,假设他们有一个转换为整数或地板功能。 或者,如果像在JavaScript中,他们有一个Math.round功能,可以直接使用。