Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Kony.cz 20 Března 2018, 15:08:58

Název: Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: TIBOR 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: ntz_reloaded 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: TIBOR 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"
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: ntz_reloaded 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: TIBOR 20 Března 2018, 18:04:17
Jaj, ja som tam nedal to /10.
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 20 Března 2018, 18:07:03
ale ani tak mi to nechce fungovat
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: TIBOR 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: ntz_reloaded 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: GdH 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))
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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...
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: GdH 20 Března 2018, 19:42:37
Ano, to bez modula nepůjde ;)
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: ntz_reloaded 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 ?
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: TIBOR 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")
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: Kony.cz 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')
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: ntz_reloaded 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
Název: Re:Zaokrouhleni cisla na desitky
Přispěvatel: ntz_reloaded 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