Форум сайта python.su
В переменной x хранится число с плаваете точкой, количество знаков после точки меняется.
Как уменьшить или увеличить последнею цифру?
Например:
X=9.343
Нужно получить x=9.342 или x=9.344
версия питона 3.1.1
Отредактировано (Окт. 16, 2009 16:20:08)
Офлайн
Я бы наверное сделал неэффективно, но всё же скажу:
преобразовать это дело в строку, цыкл сзади строки до первой цыфры, которая не 0, заменяем её на цыфру, которая больше на 1, преобразуем полученную строку в число.
Офлайн
наверное, без преобразований в строку никак.
x = 9.343
fraction = len(str(x)) - str(x).find(".") - 1
x += 1.0 / 10 ** fraction
Офлайн
ну тогда и мой алгоритм:
- преобразовать X в строку, чтобы узнать N кол-во символов после точки;
- 0,1 возвести в степень N;
- прибавить/вычесть результат из исхоного числа X.
up:
pasaranax опередил :)
Отредактировано (Окт. 16, 2009 18:01:16)
Офлайн
преобразовать число в строку, потом обратно это то что я и делал.
хочется без вот этого лишнего преобразовывания в строку
Офлайн
Монструозненько выглядит, но работает примерно в два раза быстрее с 3 знаками после точки, с 9 знаками скорости сравниваются, а с 10 вообще не работает, из-за округления наверное.
x = 9.343
order = 0
while x % 1:
x *= 10
order += 1
x += 1
x /= 10 ** order
Отредактировано (Окт. 16, 2009 23:44:15)
Офлайн
pasaranaxспасибо
Офлайн