Форум сайта python.su
py.user.next
а можно как-нибудь прописать в функции условие, чтобы левая часть до точки была без ограничений по длине, а правая до 8 знаков после точки c округлением вниз?знаю только функцию round для ограничения по знакам, но там не получается ее использовать, мне выдает что выводимое число str
Отредактировано shiroi (Окт. 30, 2017 10:49:57)
Офлайн
shiroiЕсли подаётся дробное число в саму функцию, то вот это дробное число само по себе ограничено. Там не может быть большой целой части и не может быть большой дробной части. Мало того, эти части связаны между собой и едят битовое пространство друг у друга. То есть когда у тебя слишком большая целая часть, то дробная часть становится очень маленькой (количество значащих цифр уменьшается), и наоборот, когда у тебя слишком длинная дробь, целая часть уменьшается. Поэтому ты не можешь записать 1234512345.1234512345, оно просто начнёт становиться неточным.
а можно как-нибудь прописать в функции условие, чтобы левая часть до точки была без ограничений по длине
>>> format(1234512345.1234512345, ".50f") '1234512345.12345123291015625000000000000000000000000000000000' >>> >>> format(12345.1234512345, ".50f") '12345.12345123449995298869907855987548828125000000000000' >>>
shiroiКак видно по тесту, она берёт 7 знаков после запятой, 8-ой знак уже неправильный (из-за того, что там в дроби дальше идёт и влияет на произведение).
а правая до 8 знаков после точки c округлением вниз?
shiroiНе, это здесь вообще не подойдёт. Можно подавать вообще строку на вход и дальше определять, целое это или вещественное, а потом сразу преобразовывать либо сначала раскладывать на целую и дробную части и потом преобразовывать по отдельности. И при этом дробную часть преобразовывать не через умножение float, а через умножение целых чисел. Вот тогда это всё может прокатить, прямо как во всех этих калькуляторах, которые так и делают. Они не работают с вещественными типами, всё это раскладывается на части и поэтому у них получаются результаты любой длины.
знаю только функцию round для ограничения по знакам
Отредактировано py.user.next (Окт. 30, 2017 11:03:01)
Офлайн
py.user.next
я имею ввиду на выходе ограничение, чтобы выводилось не такое 1234512345.12345123291015625000000000000000000000000000000000, а с ограничением на 8 знаков после точки
Офлайн
shiroiНу там же аргумент сделан oprecision. По умолчанию он равен 10, а ты можешь при вызове подать 8. Тогда он будет 8 цифр только брать после точки, но восьмая цифра всё равно будет неправильной.
а с ограничением на 8 знаков после точки
Отредактировано py.user.next (Окт. 31, 2017 00:50:17)
Офлайн
py.user.next
Не, все в порядке. Спасибо большое за помощь
Офлайн