Найти - Пользователи
Полная версия: система счисления с основанием n
Начало » Python для новичков » система счисления с основанием n
1 2 3
shiroi
py.user.next
а можно как-нибудь прописать в функции условие, чтобы левая часть до точки была без ограничений по длине, а правая до 8 знаков после точки c округлением вниз?знаю только функцию round для ограничения по знакам, но там не получается ее использовать, мне выдает что выводимое число str
py.user.next
shiroi
а можно как-нибудь прописать в функции условие, чтобы левая часть до точки была без ограничений по длине
Если подаётся дробное число в саму функцию, то вот это дробное число само по себе ограничено. Там не может быть большой целой части и не может быть большой дробной части. Мало того, эти части связаны между собой и едят битовое пространство друг у друга. То есть когда у тебя слишком большая целая часть, то дробная часть становится очень маленькой (количество значащих цифр уменьшается), и наоборот, когда у тебя слишком длинная дробь, целая часть уменьшается. Поэтому ты не можешь записать 1234512345.1234512345, оно просто начнёт становиться неточным.

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

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

shiroi
знаю только функцию round для ограничения по знакам
Не, это здесь вообще не подойдёт. Можно подавать вообще строку на вход и дальше определять, целое это или вещественное, а потом сразу преобразовывать либо сначала раскладывать на целую и дробную части и потом преобразовывать по отдельности. И при этом дробную часть преобразовывать не через умножение float, а через умножение целых чисел. Вот тогда это всё может прокатить, прямо как во всех этих калькуляторах, которые так и делают. Они не работают с вещественными типами, всё это раскладывается на части и поэтому у них получаются результаты любой длины.
shiroi
py.user.next
я имею ввиду на выходе ограничение, чтобы выводилось не такое 1234512345.12345123291015625000000000000000000000000000000000, а с ограничением на 8 знаков после точки
py.user.next
shiroi
а с ограничением на 8 знаков после точки
Ну там же аргумент сделан oprecision. По умолчанию он равен 10, а ты можешь при вызове подать 8. Тогда он будет 8 цифр только брать после точки, но восьмая цифра всё равно будет неправильной.
shiroi
py.user.next
Не, все в порядке. Спасибо большое за помощь
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB