» »

[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:

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

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?

FireSnake ::

Še trolat ne znaš.

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.
root@debian:/# iptraf-ng
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. :8)

toro69 ::

Zakaj raje nebi "cene" pretvoril v številko in potem zaokroževal decimalke?

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

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:

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

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:

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

Zgodovina sprememb…

  • spremenilo: HotBurek ()

Utk ::

Resno? V katerem vesolju je 18,9449 zaokroženo na 2 decimalki 18,95? Normalno da je 18,94.

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

no comment ::

HotBurek je izjavil:


Vedno (od kar sem dal skozi šolanje) sem imeli v mislih, da če se zaokrožuje, da se to dela iz dense, proti levi.

Well, that's not how it's done.

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.
root@debian:/# iptraf-ng
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.

Ales ::

HotBurek je izjavil:

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
root@debian:/# iptraf-ng
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 ::

HotBurek je izjavil:

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.

MH0 je izjavil:

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 ::

HotBurek je izjavil:

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

En bug

Oddelek: Programiranje
91190 (713) mr_chai
»

JAVA skripta za Prestashop modul

Oddelek: Programiranje
51298 (1236) steev
»

Kako zaokrožiti? Cena brez davka + popust + DDV decimalke

Oddelek: Programiranje
184360 (3517) kunigunda
»

[C++] zaokroževanje števil

Oddelek: Programiranje
82298 (1375) worxer
»

[MS Office][Excel] zaokroževanje in spajanje podatkov

Oddelek: Programska oprema
164215 (3572) milc

Več podobnih tem