Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 30, 2017 10:44:32

shiroi
Зарегистрирован: 2017-10-25
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

система счисления с основанием n

py.user.next
а можно как-нибудь прописать в функции условие, чтобы левая часть до точки была без ограничений по длине, а правая до 8 знаков после точки c округлением вниз?знаю только функцию round для ограничения по знакам, но там не получается ее использовать, мне выдает что выводимое число str

Отредактировано shiroi (Окт. 30, 2017 10:49:57)

Офлайн

#2 Окт. 30, 2017 10:56:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

система счисления с основанием n

shiroi
а можно как-нибудь прописать в функции условие, чтобы левая часть до точки была без ограничений по длине
Если подаётся дробное число в саму функцию, то вот это дробное число само по себе ограничено. Там не может быть большой целой части и не может быть большой дробной части. Мало того, эти части связаны между собой и едят битовое пространство друг у друга. То есть когда у тебя слишком большая целая часть, то дробная часть становится очень маленькой (количество значащих цифр уменьшается), и наоборот, когда у тебя слишком длинная дробь, целая часть уменьшается. Поэтому ты не можешь записать 1234512345.1234512345, оно просто начнёт становиться неточным.

  
>>> format(1234512345.1234512345, ".50f")
'1234512345.12345123291015625000000000000000000000000000000000'
>>> 
>>> format(12345.1234512345, ".50f")
'12345.12345123449995298869907855987548828125000000000000'
>>>

shiroi
а правая до 8 знаков после точки c округлением вниз?
Как видно по тесту, она берёт 7 знаков после запятой, 8-ой знак уже неправильный (из-за того, что там в дроби дальше идёт и влияет на произведение).

shiroi
знаю только функцию round для ограничения по знакам
Не, это здесь вообще не подойдёт. Можно подавать вообще строку на вход и дальше определять, целое это или вещественное, а потом сразу преобразовывать либо сначала раскладывать на целую и дробную части и потом преобразовывать по отдельности. И при этом дробную часть преобразовывать не через умножение float, а через умножение целых чисел. Вот тогда это всё может прокатить, прямо как во всех этих калькуляторах, которые так и делают. Они не работают с вещественными типами, всё это раскладывается на части и поэтому у них получаются результаты любой длины.



Отредактировано py.user.next (Окт. 30, 2017 11:03:01)

Офлайн

#3 Окт. 30, 2017 11:01:48

shiroi
Зарегистрирован: 2017-10-25
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

система счисления с основанием n

py.user.next
я имею ввиду на выходе ограничение, чтобы выводилось не такое 1234512345.12345123291015625000000000000000000000000000000000, а с ограничением на 8 знаков после точки

Офлайн

#4 Окт. 30, 2017 11:04:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

система счисления с основанием n

shiroi
а с ограничением на 8 знаков после точки
Ну там же аргумент сделан oprecision. По умолчанию он равен 10, а ты можешь при вызове подать 8. Тогда он будет 8 цифр только брать после точки, но восьмая цифра всё равно будет неправильной.



Отредактировано py.user.next (Окт. 31, 2017 00:50:17)

Офлайн

#5 Окт. 30, 2017 11:11:05

shiroi
Зарегистрирован: 2017-10-25
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

система счисления с основанием n

py.user.next
Не, все в порядке. Спасибо большое за помощь

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version