Witam, znalazłem zadanie w którym mam wygenerować liste w typie Decimal. Widzę jakieś informacje o Decimal do SQL ale do pythona tylko jedno takie średnio opisane. Może ktoś powiedzieć jak dokładnie zmienić typ plików na Decimal? Bo chyba typowe int czy str przed nawiasem niewiele pomoże.
- Rejestracja:ponad 6 lat
- Ostatnio:prawie 6 lat
- Postów:37
0
Zobacz pozostały 1 komentarz
szopen469
Dokładnie o to. Też znalazłem ten opis. Tylko nie za bardzo wiem jak mam go użyć. Działa jak intiger?
Mózg
Niezły bełkot :D

lion137
Wiemy co ma na myśli, ale nie wiemy jeszcze o co mu chodzi :-D
szopen469
Dokładnie chodzi o to czy mogę Decimal wrzucić w pętle itp.

lion137
Oczywiście, że Możesz, Poczytaj dokumentacje, tam jest wszystko.

- Rejestracja:ponad 9 lat
- Ostatnio:9 miesięcy
- Postów:245
0
Doprecyzujesz o co ci chodzi?
O tworzenie listy z decimalami w środku? something = [Decimal('1.23213'), Decimal('123.32131')
O to by iterować po decimalu? To by default nie bardzo, możesz za to scastować decimala do str i po str iterować.
Stworzyć liste liczb do 2 do 5.5 co 0.5.

[Decimal(x)/Decimal(10) for x in range(20, 56, 5)]
jeśli chcesz by była to lista Decimali
[x/10 for x in range(20,56,5)]
jeśli mają być to floaty
A to czy typowane jest we float czy w decimal ma wieksze znaczenie? Bo jak tak patrzę, większej różnicy nie ma

@szopen469: jest bardzo duża różnica - Decimal działa na typie Decimal, float na floacie co to znaczy? We floacie masz floating point imprecision, natomiast w decimalu niekoniecznie.
czyli we floacie 0.1 + 0.1 nie musi się równać dokładnie 0.2, a np. 0.200000003123 natomiast w decimalu Decimal(0.1) + Decimal(0.1) równa się zawsze dokładnie Decimal(0.2)
Lepiej używać Decimal
Czyli główna różnica to dokładność obliczeń. Okej, powoli łapie

- Rejestracja:około 8 lat
- Ostatnio:21 minut
- Postów:4935
1
To swoje range
Musisz napisać:
def my_range(st, end, step):
s = Decimal(st)
e = Decimal(end)
st = Decimal(step)
yield s
while s < e:
s = s + st
yield s
if __name__ == '__main__':
getcontext().prec = 128
g = my_range(1, 3, 0.5)
a_l = list(g)
print(a_l)
Edit: Widzę ``list comprehension``` w akcji, łądniejszy kod, tyle, że przy częstszym używaniu lepiej jest zamknąć w funkcji.
edytowany 1x, ostatnio: lion137
Czym w ostateczności różni się od listy grsk? Wynik końcowy i tak jest w Decimal? Czy to po prostu zawodowa perfekcja?

Różni si.ę tym, że to jest generator (strumień), czyli Możesz sobie stworzyć takie range od
1
do miliarda w zerowym czasie, potem dobierać już elementy w czasie n
. Czyli, dla dużych struktur, preferowany sposób.
A ok
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.