2016-10-28 8 views
1

多くのsed/awk/tail/cut/exprコマンド/関数を試しましたが、それを得ることができませんでした。bash/kshの次の10番目の数字に丸める方法は?

私は変数の中で次の/最も近い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
  • *されるべき第2のXが0
  • は、第1のXがでなければなりません(旧番号+ 1)
  • 第Xなら-eq 9次いで*次の(1/10 = 0.10)に自分の番号を切り上げている私が必要..など。

を切り上げなければならない、したがって、5.98は6.00

必要な出力形式になります* .XXで、入力番号も* .XX

+2

通常、 'x + 0.05 'を通常の方法で丸めます。 – chepner

+0

これは四捨五入しているとは思わない。その切り捨てと天井に似ています。 –

+0

おかげで私は必要なものをコーディングしてくれました。完璧です。私は以下の答えとして – mshafey

答えて

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 
+0

を理解していませんでしたが、とにかく試してみました。11.740 – mshafey

+0

あなたは私がここでテストできますか見て – mshafey

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 
関連する問題