Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Zaokrouhleni cisla na desitky  (Přečteno 14620 krát)

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Zaokrouhleni cisla na desitky
« kdy: 20 Března 2018, 15:08:58 »
Hoj, mam ve scriptu číslo např. 4567821 a potreboval bych ho zaokrouhlit smerem nahoru na to aby číslo koncilo 0 tzn 4567830 a zase třeba další číslo 876229 zase na číslo 876230.

Lze toto nejak uskutečnit ?? Zkousim prikaz Round , ale zatím jsem všude nasel jen zaokrouhlovani na cela cisla z desetinych

A nebo by stacilo aby se posledni cislo zmenilo na 0
« Poslední změna: 20 Března 2018, 16:26:22 od Kony.cz »

TIBOR

  • Závislák
  • ***
  • Příspěvků: 6529
  • Som uzivatel linuxovej distribucie, som linuxak?
Re:Zaokrouhleni cisla na desitky
« Odpověď #1 kdy: 20 Března 2018, 16:38:41 »
Skusal si vydelit ho 10-timi, bc nevie bezne pocitat s desatinnou ciarkou tak vsetko za nou odstrani a pripocitat 1?
Kód: [Vybrat]
echo "(456721/10)+1"|bc
HP Laptop 17-ca1xxx Ubuntu Mate 22.04 FF 64bit.
Asus X751LB-TY014H Ubuntu Mate 20.04.1 FF 64bit.
Linus, Lajnas, Línus, Luínus, Lajnus a je mi naozaj jedno, ako ľudia vyslovujú moje meno. Ale "Linux" je vždy "Linux". LINUS TORVALDS, tvorca Linuxového jadra.(V dokumente Revolution OS)

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #2 kdy: 20 Března 2018, 16:41:34 »
tohle ale zmeni to cislo

echo "(456721/10)+1"|bc

vysledek je

45673

ja bych potreboval aby vysledek byl 456720 a nebo 456730

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Zaokrouhleni cisla na desitky
« Odpověď #3 kdy: 20 Března 2018, 16:59:03 »
tohle je ale tupy .. v bashi to delat je hloupost

Kód: [Vybrat]
> for x in `seq 1 10`; do ./test ; done
28571
28570
2732
2730
9770
9770
11647
11650
26612
26610
10891
10890
12930
12930
5569
5570
11787
11790
11577
11580


> cat test
## random number
foo=$RANDOM;

## modulo from division by 10
foo_m=$((foo % 10));

## print original number
echo $foo;

## round up if modulo is greater than 5
if [ $foo_m -gt 5 ]; then
        echo $((foo - foo_m + 10));

## otherwise round down
else
        echo $((foo - foo_m));
fi
« Poslední změna: 20 Března 2018, 17:46:00 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

TIBOR

  • Závislák
  • ***
  • Příspěvků: 6529
  • Som uzivatel linuxovej distribucie, som linuxak?
Re:Zaokrouhleni cisla na desitky
« Odpověď #4 kdy: 20 Března 2018, 17:08:46 »
Uloz to cislo do premennej a potom k tomu cislu pridaj 0.
Kód: [Vybrat]
cislo=$(echo "456721/10"|bc);echo "$cislo""0":D

Kód: [Vybrat]
cislo=$(date +"%H%M%S"|bc);echo "$cislo""0"
« Poslední změna: 20 Března 2018, 17:10:21 od TIBOR »
HP Laptop 17-ca1xxx Ubuntu Mate 22.04 FF 64bit.
Asus X751LB-TY014H Ubuntu Mate 20.04.1 FF 64bit.
Linus, Lajnas, Línus, Luínus, Lajnus a je mi naozaj jedno, ako ľudia vyslovujú moje meno. Ale "Linux" je vždy "Linux". LINUS TORVALDS, tvorca Linuxového jadra.(V dokumente Revolution OS)

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #5 kdy: 20 Března 2018, 17:48:15 »
zkousim tohle

Kód: [Vybrat]
cislo=$(date +"%H%M%S"|bc);echo "$cislo""0"
to vypise cas vcetne sekund a prida k tomu 0, takze
vysledek

17h47m180s

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Zaokrouhleni cisla na desitky
« Odpověď #6 kdy: 20 Března 2018, 17:50:28 »
zkousim tohle

Kód: [Vybrat]
cislo=$(date +"%H%M%S"|bc);echo "$cislo""0"
to vypise cas vcetne sekund a prida k tomu 0, takze
vysledek

17h47m180s
napsal jsem ti reseni, co chces vic ... dokonce tri reseni

a) jak zaokrouhlovat spravne
b) jak zaokrouhlovat nahoru
c) jak zaokrouhlovat dolu

to co napsal tibor je absolutni nesmysl, protoze

Kód: [Vybrat]
n == n|bc
« Poslední změna: 20 Března 2018, 17:53:01 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #7 kdy: 20 Března 2018, 17:55:20 »
aha... no nejak jsem to nepobral :))) musim to projit

PS: No tak to nemam vubec tuseni jak to pouzit
« Poslední změna: 20 Března 2018, 17:57:52 od Kony.cz »

TIBOR

  • Závislák
  • ***
  • Příspěvků: 6529
  • Som uzivatel linuxovej distribucie, som linuxak?
Re:Zaokrouhleni cisla na desitky
« Odpověď #8 kdy: 20 Března 2018, 18:04:17 »
Jaj, ja som tam nedal to /10.
HP Laptop 17-ca1xxx Ubuntu Mate 22.04 FF 64bit.
Asus X751LB-TY014H Ubuntu Mate 20.04.1 FF 64bit.
Linus, Lajnas, Línus, Luínus, Lajnus a je mi naozaj jedno, ako ľudia vyslovujú moje meno. Ale "Linux" je vždy "Linux". LINUS TORVALDS, tvorca Linuxového jadra.(V dokumente Revolution OS)

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #9 kdy: 20 Března 2018, 18:07:03 »
ale ani tak mi to nechce fungovat

TIBOR

  • Závislák
  • ***
  • Příspěvků: 6529
  • Som uzivatel linuxovej distribucie, som linuxak?
Re:Zaokrouhleni cisla na desitky
« Odpověď #10 kdy: 20 Března 2018, 18:15:15 »
Co mas za os a verziu? Ja mam ubuntu mate a vysledok mam
Kód: [Vybrat]
cislo=$(date +"%H%M%S"/10|bc);echo "$cislo""0"
181440
HP Laptop 17-ca1xxx Ubuntu Mate 22.04 FF 64bit.
Asus X751LB-TY014H Ubuntu Mate 20.04.1 FF 64bit.
Linus, Lajnas, Línus, Luínus, Lajnus a je mi naozaj jedno, ako ľudia vyslovujú moje meno. Ale "Linux" je vždy "Linux". LINUS TORVALDS, tvorca Linuxového jadra.(V dokumente Revolution OS)

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #11 kdy: 20 Března 2018, 18:18:00 »
mam ubuntu 16.04

Kód: [Vybrat]
#!/bin/bash
cislo=$(date +"%H%M%S / 10"|bc);echo "$cislo""0"
echo $cislo

a vysledek

Kód: [Vybrat]
181820
18182


PS: blbec jsem tam mel to echo , ted jsem si toho vsiml

PSS: takze to funguje.. a ted kdybych chtel k tomu cislu pricist 10 nebo 20 nebo 30 ??

Takto to nejde

Kód: [Vybrat]
cislo=$(date +"%H%M%S / 10"|bc);echo "$cislo""0"
deset="$cislo + 10" | bc

cat $cislo

PS: Tak uz fakt nevim..
Potrebuji mit nekolik udaju, kde bude pravidlo
aktualni cas s nulou nakonci
aktualni cas + 10
aktualni cas + 20
aktualni cas + 30
aktualni cas + 40
aktualni cas + 50

aby vysledek vypadal

aktualni cas = 18:52

vystup do promennych
aktualni=185200
aktualni_10=185210
aktualni_20=185220
aktualni_30=185230
aktualni_40=185240
aktualni_50=185250
« Poslední změna: 20 Března 2018, 18:54:04 od Kony.cz »

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Zaokrouhleni cisla na desitky
« Odpověď #12 kdy: 20 Března 2018, 19:08:55 »
Kód: [Vybrat]
## random number
foo=$RANDOM;

## modulo from division by 10
foo_m=$((foo % 10));

## print original number
echo $foo;

## round up if modulo is greater than 5
if [ $foo_m -gt 5 ]; then
        echo $((foo - foo_m + 10));

## otherwise round down
else
        echo $((foo - foo_m));
fi

napsal jsem ti reseni !!!! co chces vic ... proste to uloz do souboru a pust
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #13 kdy: 20 Března 2018, 19:12:03 »
Kód: [Vybrat]
## random number
foo=$RANDOM;

## modulo from division by 10
foo_m=$((foo % 10));

## print original number
echo $foo;

## round up if modulo is greater than 5
if [ $foo_m -gt 5 ]; then
        echo $((foo - foo_m + 10));

## otherwise round down
else
        echo $((foo - foo_m));
fi



sudo ./test2.sh
0

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re:Zaokrouhleni cisla na desitky
« Odpověď #14 kdy: 20 Března 2018, 19:24:06 »
No a co to udělat úplně jednoduše, vzhledem k tomu, že Bash ignoruje desetinná místa:
Kód: [Vybrat]
cislo=$(date +"%H%M%S");echo $(((cislo/10+1)*10))přičemž jedničku zaměníš za jiné číslo, podle toho, kolik desítek chceš přidat

Edit: nebo ještě jednodušeji:
Kód: [Vybrat]
cislo=$(date +"%H%M%S");echo $((cislo/10*10+10))
« Poslední změna: 20 Března 2018, 19:34:21 od GdH »

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #15 kdy: 20 Března 2018, 19:36:49 »
193500
193510
193520
193530
193540
193550

ale potom to pokracuje

193520
193530
193540
193550
193560
193570

193530
193540
193550
193560
193570
193580

193530
193540
193550
193560
193570
193580

coz je spatny... potrebuji aby vzdycky byl doplnena hodina a minuta a sekundy vzdy byli stejny 00,10,20,30,40,50... a takto porad dokola....


uplne staci aby se do promenny zapsala hodina+minuta a knim se doplnili 00,10,20,30,40,50.. a potom jak se minuta zvedne o jednu tak zase doplnit...
« Poslední změna: 20 Března 2018, 19:41:02 od Kony.cz »

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re:Zaokrouhleni cisla na desitky
« Odpověď #16 kdy: 20 Března 2018, 19:42:37 »
Ano, to bez modula nepůjde ;)

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Zaokrouhleni cisla na desitky
« Odpověď #17 kdy: 20 Března 2018, 19:55:29 »
pro kristovy rany :D ... proc se sudem, co to tam s tim vyvadis, moje reseni je priklad kde demonstruju zaokrouhleni na nahodne vygenerovanem cisle:

vytiskne to nejdriv nahodne vygenerovane cislo a potom jak ho to zaokrouhli na desitky:

Kód: [Vybrat]
> ./test
29548
29550

> ./test
30731
30730

> ./test
866
870

> ./test
31701
31700

> ./test
9430
9430

kdyz si to prectes, tak vidis, ze tam jsou 3 metody !!!! metoda jedna je zaokrouhleni dolu

Kód: [Vybrat]
> foo=$RANDOM; echo $foo; echo $((foo - (foo % 10)))
6582
6580

metoda #2 je zaokrouhleni nahoru:

Kód: [Vybrat]
> foo=$RANDOM; echo $foo; echo $((foo + 10 - (foo % 10)))
30771
30780

a tedka schvalne ... ma to jednu lehce resitelnou chybicku pri zaokrouhlovani nahoru .. je to jen logicka uvaha, pokud vstupni cislo konci 0, tak to vlastne 10 pricte, jak to elegantne vyresesis ?
« Poslední změna: 20 Března 2018, 20:00:03 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

TIBOR

  • Závislák
  • ***
  • Příspěvků: 6529
  • Som uzivatel linuxovej distribucie, som linuxak?
Re:Zaokrouhleni cisla na desitky
« Odpověď #18 kdy: 20 Března 2018, 20:25:01 »
Ja len doplnim k tomu mojmu. S BASH asi este nemas vela skusenosti. Ten moj prikaz su dva riadky zapisane do jednoho riadku. Prvy prikaz je po znak ; a to co je za nim je dalsi prikaz, cize do premennej ukladas iba to co je po znak ; . Je to preto ze to spustam cez terminal, ak by som to pisal do suboru bolo by to takto
Kód: [Vybrat]
#!/bin/bash
cislo=$(date +"%H%M%S / 10"|bc)
echo "$cislo""0"
Cize ak chces pocitat dalej s vysledkom musi si ulozit vysledok do premennej, napr.
Kód: [Vybrat]
cislo_po_uprave=$(echo "$cislo""0")
HP Laptop 17-ca1xxx Ubuntu Mate 22.04 FF 64bit.
Asus X751LB-TY014H Ubuntu Mate 20.04.1 FF 64bit.
Linus, Lajnas, Línus, Luínus, Lajnus a je mi naozaj jedno, ako ľudia vyslovujú moje meno. Ale "Linux" je vždy "Linux". LINUS TORVALDS, tvorca Linuxového jadra.(V dokumente Revolution OS)

Kony.cz

  • Aktivní člen
  • *
  • Příspěvků: 289
Re:Zaokrouhleni cisla na desitky
« Odpověď #19 kdy: 21 Března 2018, 09:00:19 »
takze jsem to vyresil takto :

Kód: [Vybrat]
cas=$(date +"%Y%m%d"_"%H%M")
nul=$cas'00'
dese=$cas'10'
dvace=$cas'20'
trice=$cas'30'
ctyrice=$cas'40'
padesa=$cas'50'

ale jeste bych potreboval abych k promenne $cas pripocetl na konec 1 (tim vlastne posunu cas o jednu minutu dopredu)

zkousim to :
Kód: [Vybrat]
sedesa=($cas+1)nebo
Kód: [Vybrat]
sedesa=($cas+1)|bc
ale to samozrejme nejde

tak mam to :

Kód: [Vybrat]
cas2=$(date +"%H%M" -d '5 minutes')
« Poslední změna: 21 Března 2018, 09:33:16 od Kony.cz »

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Zaokrouhleni cisla na desitky
« Odpověď #20 kdy: 21 Března 2018, 12:09:29 »
No a co to udělat úplně jednoduše, vzhledem k tomu, že Bash ignoruje desetinná místa:
Kód: [Vybrat]
cislo=$(date +"%H%M%S");echo $(((cislo/10+1)*10))přičemž jedničku zaměníš za jiné číslo, podle toho, kolik desítek chceš přidat

Edit: nebo ještě jednodušeji:
Kód: [Vybrat]
cislo=$(date +"%H%M%S");echo $((cislo/10*10+10))
ano presne tak napriklad !!!!!

ale myslim, ze chlapci chteji lstive opravdu neco neobycejneho .. GdH, tvy reseni je elegantni, ale chybi mu takova ta `tadáááá' velkolepost
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Zaokrouhleni cisla na desitky
« Odpověď #21 kdy: 23 Března 2018, 10:54:07 »
Kód: [Vybrat]
foo=${RANDOM}0; echo $foo; echo $(((foo+9-((foo+9)%10))))
198110
198110

> foo=${RANDOM}; echo $foo; echo $(((foo+9-((foo+9)%10))))
17551
17560

druhe reseni

Kód: [Vybrat]
> foo=${RANDOM}0; echo $foo; echo $(((foo + 9)/10*10))
43100
43100

> foo=${RANDOM}; echo $foo; echo $(((foo + 9)/10*10))
14609
14610
« Poslední změna: 23 Března 2018, 10:56:44 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

 

Provoz zaštiťuje spolek OpenAlt.