在我的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 )
要么
任何其他语言,可以运行在我的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
功能,可以直接使用。