2017-02-05 30 views
-1

Я ищу способ округления чисел в python (на выходе) до 4 значащих цифр.Круглый Python плавает до 4 значащих цифр на выходе, в разных числовых диапазонах

То есть, я хочу функцию, r4(), что имеет такое поведение:

r4(1.23456) -> '1.235' 
r4(12.3456) -> '12.35' 
r4(123.456) -> '123.5' 
r4(1234.56) -> '1235.' 

Во всех этих случаях я округлить до «4», а не «5», потому что я хочу IEEE режим округления " круглый половина Даже»(округляется до ближайшего со связями, идущих до ближайшего целого числа событий), поэтому функция должна также производить:

r4(1.23556) -> '1.236' 

Я посмотрел на round() и при использовании .f форматирования, и ничего не делает это совершенно верно. Я думаю о том, чтобы взять его в научную нотацию, вычислить число значимых фигур, а затем забрать ее, но это кажется глупым.

+0

Интересно, почему кто-то дал мне -1. – vy32

+0

Округление, которое вы запрашиваете, не соответствует формату IEEE round-ties-to-even: '1.23456' строго соответствует' 1.235', чем '1.234', поэтому он должен округлить, а не вниз в этом режиме , –

+0

Помимо направления округления, 'def r4 (x): формат возврата (x, '.4g')' кажется близким к тому, что вам нужно. –

ответ

0

Найден правильный способ сделать это:

def r4(input_value): 
    from decimal import Decimal,ROUND_HALF_EVEN,Context 
    ctx = Context(prec=4, rounding=ROUND_HALF_EVEN) 
    return str(ctx.create_decimal(input_value))