Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 16, 2009 16:19:04

NoN
От:
Зарегистрирован: 2008-04-28
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с числом с плавующей точкой

В переменной x хранится число с плаваете точкой, количество знаков после точки меняется.
Как уменьшить или увеличить последнею цифру?
Например:
X=9.343
Нужно получить x=9.342 или x=9.344

версия питона 3.1.1



Отредактировано (Окт. 16, 2009 16:20:08)

Офлайн

#2 Окт. 16, 2009 17:49:18

GDK
От:
Зарегистрирован: 2009-08-21
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с числом с плавующей точкой

Я бы наверное сделал неэффективно, но всё же скажу:

преобразовать это дело в строку, цыкл сзади строки до первой цыфры, которая не 0, заменяем её на цыфру, которая больше на 1, преобразуем полученную строку в число.



Офлайн

#3 Окт. 16, 2009 17:59:51

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с числом с плавующей точкой

наверное, без преобразований в строку никак.

x = 9.343
fraction = len(str(x)) - str(x).find(".") - 1
x += 1.0 / 10 ** fraction
это увеличит на единицу в первом порядке



Офлайн

#4 Окт. 16, 2009 18:00:14

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с числом с плавующей точкой

ну тогда и мой алгоритм:
- преобразовать X в строку, чтобы узнать N кол-во символов после точки;
- 0,1 возвести в степень N;
- прибавить/вычесть результат из исхоного числа X.

up:
pasaranax опередил :)



Отредактировано (Окт. 16, 2009 18:01:16)

Офлайн

#5 Окт. 16, 2009 22:33:58

NoN
От:
Зарегистрирован: 2008-04-28
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с числом с плавующей точкой

преобразовать число в строку, потом обратно это то что я и делал.
хочется без вот этого лишнего преобразовывания в строку



Офлайн

#6 Окт. 16, 2009 23:39:20

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с числом с плавующей точкой

Монструозненько выглядит, но работает примерно в два раза быстрее с 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)

Офлайн

#7 Окт. 17, 2009 16:00:10

NoN
От:
Зарегистрирован: 2008-04-28
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с числом с плавующей точкой

pasaranax
спасибо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version