NoN
Окт. 16, 2009 16:19:04
В переменной x хранится число с плаваете точкой, количество знаков после точки меняется.
Как уменьшить или увеличить последнею цифру?
Например:
X=9.343
Нужно получить x=9.342 или x=9.344
версия питона 3.1.1
GDK
Окт. 16, 2009 17:49:18
Я бы наверное сделал неэффективно, но всё же скажу:
преобразовать это дело в строку, цыкл сзади строки до первой цыфры, которая не 0, заменяем её на цыфру, которая больше на 1, преобразуем полученную строку в число.
pasaranax
Окт. 16, 2009 17:59:51
наверное, без преобразований в строку никак.
x = 9.343
fraction = len(str(x)) - str(x).find(".") - 1
x += 1.0 / 10 ** fraction
это увеличит на единицу в первом порядке
DHT
Окт. 16, 2009 18:00:14
ну тогда и мой алгоритм:
- преобразовать X в строку, чтобы узнать N кол-во символов после точки;
- 0,1 возвести в степень N;
- прибавить/вычесть результат из исхоного числа X.
up:
pasaranax опередил :)
NoN
Окт. 16, 2009 22:33:58
преобразовать число в строку, потом обратно это то что я и делал.
хочется без вот этого лишнего преобразовывания в строку
pasaranax
Окт. 16, 2009 23:39:20
Монструозненько выглядит, но работает примерно в два раза быстрее с 3 знаками после точки, с 9 знаками скорости сравниваются, а с 10 вообще не работает, из-за округления наверное.
x = 9.343
order = 0
while x % 1:
x *= 10
order += 1
x += 1
x /= 10 ** order
NoN
Окт. 17, 2009 16:00:10