pythonで整数の四捨五入

paizaで整数の四捨五入の課題が有り、提出後ランタイムエラーで一部チェックでエラーとなった。

 

Decimal, ROUND_HALF_UP をインポートして使用したから?そもそも標準で四捨五入ができないので検索しても何やら回りくどい説明と関数をインポート云々で小数点での四捨五入の説明ばかりでなかなかたどり着かなかった。

後日問題は開示中止になったので、何かしら問題があったのかも?

 

もやもやするので、関数を使用せずに整数の四捨五入をしてみよう。

標準入力で

四捨五入する数値 = 33333

四捨五入する桁  = 2

が入力されるとする。

33333の下2桁を四捨五入(十の位で四捨五入)する。

N = [i for i in input()]    #数値をlistにする
K = int(input())            #四捨五入する桁数をint型に
if int(N[-K]) >=5:          #5以上で繰り上がる処理
    N[-K-1] = str( int(N[-K-1])+1 ) #NのK桁の1つ上の桁を繰り上げ処理
    N[-K:]="0"*K                    #NのK桁数分を0で埋める
else:
    N[-K:]="0"*(K)   #4以下で切り捨る場合の処理
print(*N,sep="")     #結果出力(listのSTR型をブランク無しで出力)

 

このままでは、複数の四捨五入した値を演算する場合等に使えないので。

 

S=""            #結果をint型にする処理変数Sを作成
for i in N:     #ループ処理でlistから1文字づつSに加える
    S+=i
print(S)        #出力(Sを型変更してint型にできる様になっている。)

結果 33300 になる。

なんか間違ってる?もっと簡潔にできそうだけどスキル不足。( ;∀;)

 

元々のDecimal, ROUND_HALF_UP使用例

from decimal import Decimal, ROUND_HALF_UP  #ROUND_HALF_UP 四捨五入する関数
N = input()         #四捨五入する整数
K = "1E"+input()    #整数部のKの位で四捨五入する指定
print(int(Decimal(N).quantize(Decimal(R), ROUND_HALF_UP)))  #Decimal(1E"四捨五入する桁")