解答例_2_13

この問題には様々な解答方法があると思います。以下はその一例に過ぎません。
確認用コードの結果が一致して入れば特に問題はございません。

def round2(number, digits=0):
    """四捨五入の関数

    引数
      number: 四捨五入する数
      digits: 桁指定(int型)
        0 (デフォルト): 整数化
        プラス:小数点以下の残す桁数
        マイナス:小数点から左側を0にする桁数
    戻り値: 四捨五入後の数 float型(digits>=1) int型(digits<1)
    """
    
    if isinstance(number, (float, int)) and isinstance(digits, int):
        x = number * 10**digits
        result = ((abs(x) + 0.5)//1) / 10**digits * x/abs(x)
        if digits <= 0:
            return int(result)
        else: # digits > 0
            return result
        
    else:
        print('numberには数値、ndigitsには整数を入力して下さい')
        return None

関数の最後の return None は戻り値がないことを明示的に宣言しているものです。戻り値がない関数にはわざわざ return None とする必要はありませんが、この関数の様に正常な引数の場合に戻り値がある場合は、そうでない場合は明示的にreturn None とすることが推奨されています。

確認

# 確認用コード
print(round2(0.499), round2(0.500), round2(0.501)) # 0 1 1
print(round2(-0.499), round2(-0.500), round2(-0.501)) # 0 -1 -1
print(round2(0.5), round2(0.15, 1), round2(0.025, 2), round2(0.0035, 3)) # 1 0.2 0.03 0.004
print(round2(-0.5), round2(-0.15, 1), round2(-0.025, 2), round2(-0.0035, 3)) # -1 -0.2 -0.03 -0.004
print(round2(14.9, -1), round2(1150, -2), round2(12499, -3), round2(125000, -4)) # 10 1200 12000 130000
print(round2(-14.9, -1), round2(-1150, -2), round2(-12499, -3), round2(-125000, -4)) # -10 -1200 -12000 -130000
print(type(round2(0.5, 0)), type(round2(0.555, 2)), type(round2(1234, -2))) # int float int
print(round2(1.5, 0.5))  # numberには数値、ndigitsには整数を入力して下さい None
print(round2('1.5', 0))  # numberには数値、ndigitsには整数を入力して下さい None

0 1 1
0 -1 -1
1 0.2 0.03 0.004
-1 -0.2 -0.03 -0.004
10 1200 12000 130000
-10 -1200 -12000 -130000

numberには数値、ndigitsには整数を入力して下さい
None
numberには数値、ndigitsには整数を入力して下さい
None

タイトルとURLをコピーしました