Forum » Programiranje » [Python] Kako celo število 938084 "zaokrožit" na 94?
[Python] Kako celo število 938084 "zaokrožit" na 94?
HotBurek ::
Dobro jutro.
Evo, nov dan, nov izziv.
Problem je sledeč. Kako številko 938084 zaokrožit na "dve decimalke", da postane 94?
Trenutno imam to rešeno s sledečim samplom:
Output:
Ali obstaja kakšna built-in funkcija za to?
Evo, nov dan, nov izziv.
Problem je sledeč. Kako številko 938084 zaokrožit na "dve decimalke", da postane 94?
Trenutno imam to rešeno s sledečim samplom:
price1 = "938084"; devide_by = int("1" + "0".zfill(len(price1) - 2)); print(devide_by); price1 = int(price1)/devide_by; print(price1); price1 = int(round(price1, 0)); print(price1);
Output:
10000 93.8084 94
Ali obstaja kakšna built-in funkcija za to?
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
MH0 ::
Nisi napisal kako veš, da je 938084 93 cela nekaj in ne 9 ali 938 cela nekaj...
Zgodovina sprememb…
- spremenilo: MH0 ()
Baja ::
kaj sploh rešuješ? so cifre vedno 6mestne? al so lahko tudi 5 ali 7?
nov dan, novo troll vprašanje?
nov dan, novo troll vprašanje?
FireSnake ::
Še trolat ne znaš.
Kaj se zgodi, ko se deli z 0? Kako to uloviš?
Kaj se zgodi, ko se deli z 0? Kako to uloviš?
Poglej in se nasmej: vicmaher.si
HotBurek ::
Številke so lahko poljubno dolge. Ker berem podatke iz internetov, je vse sorte. Tudi črke, a tisto ujamem v try/except.
Za dolžino preverim, da je 3 ali več. Ker če je 2 (ali manj), se pusti, kot je.
Vrednost je v osnovi cena. Amapk to so potem različne vrednosti:
1.234.56
1,234.567
1.234,5689
itn...
V nekem treutki preverim, če je za zadnjo piko več kot 2 znakov. In če so, to vzamem, in zaokrožim navzgor na 2 decimalke.
Za dolžino preverim, da je 3 ali več. Ker če je 2 (ali manj), se pusti, kot je.
Vrednost je v osnovi cena. Amapk to so potem različne vrednosti:
1.234.56
1,234.567
1.234,5689
itn...
V nekem treutki preverim, če je za zadnjo piko več kot 2 znakov. In če so, to vzamem, in zaokrožim navzgor na 2 decimalke.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
Miki N ::
Jebemti, upam, da Burek vse to dela za lasten štos, ker če je v kaki "produkciji" smo ga najebal.
sbawe64 ::
Problem je sledeč. Kako številko 938084 zaokrožit na "dve decimalke", da postane 94?
Številke so lahko poljubno dolge
Torej ti bi rad poljubno dolgo celo številko zaokrožil navzgor na dve mesti skupne dolžine ?
nekaj takega ?
https://pastebin.com/kD7J7N48
2020 is new 1984
Corona World order
Corona World order
Zgodovina sprememb…
- spremenilo: sbawe64 ()
HotBurek ::
Zanimivo.
Pogledaš, če je cifra na tretji pozijicij 5 ali več. In če je, prišteješ ena k "prvima dvema", sicer samo vrneš kar je.
Jst bi to sicer, meni za razumevanje, poenostavil:
Well Done!
----------------
toro69, to parsanje cene se že nekaj časa vleče. Ko se je pojavil prvi problem, sem pač naredil "if this not ok: fix it". In potem se je pojavil en drug problem, in sem dodal "oh if this not ok: well fix it". Vse v upanju, da je to to, in da bodo vsi ostali inputi po reglcih.
Po nekaj časa se je nabralo teh "if"-ov in nastali so rahli špageti. Zdaj vidim, da bi lahko hranil izvorno vrednost za ceno, in občasno popravil parser. A tega (izvorne vrednosti za ceno) ne hranim.
Je pa res, da če je input 12.3456, je (verjetno) najbolj smiselno uporabit "{:.2f}". To tudi delam.
Sedaj sem dodal tudi filter, ki iz vrednosti "cena" (to je razno raznega) naprej pošlje zgolj tisto, kar je v seznamu ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", "."].
Pogledaš, če je cifra na tretji pozijicij 5 ali več. In če je, prišteješ ena k "prvima dvema", sicer samo vrneš kar je.
Jst bi to sicer, meni za razumevanje, poenostavil:
if int(num_str[2]) >= 5: return int(num_str[:2]) + 1 else: return int(num_str[:2])
Well Done!
----------------
toro69, to parsanje cene se že nekaj časa vleče. Ko se je pojavil prvi problem, sem pač naredil "if this not ok: fix it". In potem se je pojavil en drug problem, in sem dodal "oh if this not ok: well fix it". Vse v upanju, da je to to, in da bodo vsi ostali inputi po reglcih.
Po nekaj časa se je nabralo teh "if"-ov in nastali so rahli špageti. Zdaj vidim, da bi lahko hranil izvorno vrednost za ceno, in občasno popravil parser. A tega (izvorne vrednosti za ceno) ne hranim.
Je pa res, da če je input 12.3456, je (verjetno) najbolj smiselno uporabit "{:.2f}". To tudi delam.
Sedaj sem dodal tudi filter, ki iz vrednosti "cena" (to je razno raznega) naprej pošlje zgolj tisto, kar je v seznamu ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", "."].
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
HotBurek ::
Evo, bom počasi bil zaključil s sledečo zadevo.
Vedno (od kar sem dal skozi šolanje) sem imeli v mislih, da če se zaokrožuje, da se to dela iz dense, proti levi.
Če vidim prav, Python zaokrožuje malo tko-tko.
Primer:
Output:
Se pravi, če gre korak po korak iz desne proti levi, pride do prave rešitve (tako jaz pravim). Če gre direkt, pa ne.
Torej, vhodna cifra je 18.9449. To zaokrožimo na dve decimalke. Po predpisih. Kateri je zdej pravilni rezultat? Jst bi na testu dal: 18.95
Vedno (od kar sem dal skozi šolanje) sem imeli v mislih, da če se zaokrožuje, da se to dela iz dense, proti levi.
Če vidim prav, Python zaokrožuje malo tko-tko.
Primer:
price1 = 18.9449; price1_x = round(price1, 3); print(str(price1) + " > " + str(price1_x)); price2_x = round(price1_x, 2); print(str(price1_x) + " > " + str(price2_x)); price3_x = round(price1, 2); print(str(price1) + " > " + str(price3_x));
Output:
18.9449 > 18.945 18.945 > 18.95 18.9449 > 18.94
Se pravi, če gre korak po korak iz desne proti levi, pride do prave rešitve (tako jaz pravim). Če gre direkt, pa ne.
Torej, vhodna cifra je 18.9449. To zaokrožimo na dve decimalke. Po predpisih. Kateri je zdej pravilni rezultat? Jst bi na testu dal: 18.95
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
Utk ::
When rounding, you always start with the original value, count out to the specified "place", and round. You never round from the right, moving step-by-step to the left, until you reach the specified "place"!
For instance, if you were told to round 5.7445 to two decimal places, it would be wrong to say "well, 5.7445 rounds to 5.745, which rounds to 5.75." This is wrong!
Instead, use the original number, mark off the "place" in question -- 5.74 | 45 -- and round from there to get 5.74
For instance, if you were told to round 5.7445 to two decimal places, it would be wrong to say "well, 5.7445 rounds to 5.745, which rounds to 5.75." This is wrong!
Instead, use the original number, mark off the "place" in question -- 5.74 | 45 -- and round from there to get 5.74
no comment ::
HotBurek ::
Ampak potem to ni "zaokroževanje navzgoraj".
Če se tako "zaokrožuje", potem pač porežeš, kar je extra.
Kot je Utk dal.
5.74 | 45 -- and round from there to get 5.74
Tu ni nobenega zaorkoževanja. Tudi, če bi imel 5.74 | 99, pride ven isti rezultat.
Če se tako "zaokrožuje", potem pač porežeš, kar je extra.
Kot je Utk dal.
5.74 | 45 -- and round from there to get 5.74
Tu ni nobenega zaorkoževanja. Tudi, če bi imel 5.74 | 99, pride ven isti rezultat.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
ViperR ::
A si imel ti matematiko v osnovni šoli? To je normalno zaokroževanje.
Zdej če ti specifično hočeš, da zaokroži navzdol (floor), boš pač porezal vse decimalke zadi.
Zdej če ti specifično hočeš, da zaokroži navzdol (floor), boš pač porezal vse decimalke zadi.
Ales ::
Ampak potem to ni "zaokroževanje navzgoraj".
Če se tako "zaokrožuje", potem pač porežeš, kar je extra.
Kot je Utk dal.
5.74 | 45 -- and round from there to get 5.74
Tu ni nobenega zaorkoževanja. Tudi, če bi imel 5.74 | 99, pride ven isti rezultat.
Ne, ne pride.
>>> print(round(15.7499, 2)) 15.75
HotBurek ::
Ta tretja decimalka mora bit 4, ta četrta pa 5 ali več.
18.7449 > 18.745
18.745 > 18.75
18.7449 > 18.745
18.745 > 18.75
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
MH0 ::
Vedeti moraš za kaj uporabljaš zaokroževanje in potem po potrebi uporabiš bančno zaokroževanje.
Utk ::
Ampak potem to ni "zaokroževanje navzgoraj".
Če se tako "zaokrožuje", potem pač porežeš, kar je extra.
Kot je Utk dal.
5.74 | 45 -- and round from there to get 5.74
Tu ni nobenega zaorkoževanja. Tudi, če bi imel 5.74 | 99, pride ven isti rezultat.
Seveda je zaokroževanje. Če je manj kot pol, se zaokroži navzdol, če več kot pol, navzgor.
Kaj pa če bi imeli primer 1,444444445 in bi hoteli zaokrožit na celo število. Vsem je jasno, da to ni (niti blizu) 2. Ampak po tvojem sistemu se bi zaokrožilo na 2.
Vedeti moraš za kaj uporabljaš zaokroževanje in potem po potrebi uporabiš bančno zaokroževanje.
Bančno je na sodo število? To ga bi šele zmedlo...
Zgodovina sprememb…
- spremenil: Utk ()
Ales ::
Ta tretja decimalka mora bit 4, ta četrta pa 5 ali več.
Đizs no. Z razlogom te folk sprašuje, ali si šprical matematiko, ker očitno ne znaš zaokroževati. Nauči se to, preden programiraš take zadeve.
Alternativno: zaupaj pythonu.
Kaj je bolj verjetno, da ima napako funkcija v popularnem in dolgo obstoječem jeziku, kot je python, ali da so tvoje predstave o zaokroževanju napačne? To bi moral dojet še preden si prišel sem pisat temo.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | En bugOddelek: Programiranje | 1213 (736) | mr_chai |
» | JAVA skripta za Prestashop modulOddelek: Programiranje | 1317 (1255) | steev |
» | Kako zaokrožiti? Cena brez davka + popust + DDV decimalkeOddelek: Programiranje | 4401 (3558) | kunigunda |
» | [C++] zaokroževanje številOddelek: Programiranje | 2312 (1389) | worxer |
» | [MS Office][Excel] zaokroževanje in spajanje podatkovOddelek: Programska oprema | 4240 (3597) | milc |