如何在bash / ksh上将数字舍入到下一个10的等价物?

时间:2016-10-28 13:47:54

标签: bash

我尝试了很多sed / awk / tail / cut / expr命令/函数,但我无法得到它。

我需要将我在变量中的任何数字舍入到下一个/最接近的第10个等价物。

关于我需要回合的例子(S):

Source no  >  Rounded to
1.74       > 1.80
11.74      > 11.80    
222.74     > 222.80    
5.35       > 5.40    
44.11      > 44.20    
4.93       > 5.00    
4.89       > 4.90    
4.80       > 4.90

所以我需要到达下一个0.10号码!

  • 舍入的数字应为* .XX
  • 第二个X必须为0
  • 第一个X必须是(旧号码+ 1)
  • 第一个X if -eq 9然后*应该向上舍入..等等..

我需要的是将我的数字四舍五入到下一个(1/10 = 0.10),因此5.98将是6.00

所需的输出格式应为* .XX,输入数字也为* .XX

2 个答案:

答案 0 :(得分:0)

请注意bash only supports integers

在您的情况下,如果您只有2位数的精度,则需要添加0.09

您可以使用bc执行浮点运算,也可以使用2个int来模拟FP编号:

# Pseudocode

# 11.74 (assuming we only have 2 digits precision)
A_INT=11
A_DEC=74

A_DEC_ROUND=$A_DEC+9
if A_DEC_ROUND > 100; then
    A_INT=$A_INT+1
    A_DEC_ROUND=$A_DEC_ROUND-100
fi
A_DEC_ROUND=$A_DEC_ROUND/10
A_DEC=$A_DEC_ROUND*10

答案 1 :(得分:0)

我编写了我需要的东西,它的工作非常完美...

number=$1

INT=`echo $number|cut -f1 -d"."`

DEC=`echo $number|cut -f2 -d"."|cut -c0-1`

if [ $DEC -ne 9 ]

then

DEC=`echo $DEC+1|bc`

DEC=`echo $DEC'0'`

INT=$INT

else

DEC=00

INT=`echo $INT+1|bc`

fi

echo $INT.$DEC