Portál AbcLinuxu, 11. května 2025 04:37

Dotaz: Divné zaokrouhlování s printf (BASH)

MaSo avatar 6.7.2019 14:08 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Divné zaokrouhlování s printf (BASH)
Přečteno: 366×
Odpovědět | Admin
Ahoj komunito :-)

všude se píše, že se dá zaokrouhlovat v "BASHi" pomoci fprint "%.0f" ...
Jen u následujících příkladů každý zaokrouhluje jinak; nahoru vs. dolu:

LC_ALL=C printf "%.0f\n" 1995.5
1996
LC_ALL=C printf "%.0f\n" 332.5
332
První řádek zaokrouhluje nahoru, jak má být a druhý dolů, proč?
Dělá mi to stejně na více mašinách (Ubuntu, Debian)

Děkuji za radu
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.7.2019 14:29 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Divné zaokrouhlování s printf (BASH)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jednu polovinu zaokrouhlí tak, aby výsledek byl sudý.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
6.7.2019 14:40 NN
Rozbalit Rozbalit vše Re: Divné zaokrouhlování s printf (BASH)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je to round half to even zaokrouhlovani, kde se v pripade rozhodovani u 0.5 pouzije neblizsi sude cislo.
MaSo avatar 6.7.2019 15:54 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: Divné zaokrouhlování s printf (BASH)
Ok, jak tedy udělat zaokrouhlování, aby to bylo VŽDY jedním směrem a to optimálně nahoru

Děkuji
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
Řešení 1× (MaSo (tazatel))
MaSo avatar 6.7.2019 17:11 MaSo | skóre: 15 | blog: MaSo | Frýdek-Místek
Rozbalit Rozbalit vše Re: Divné zaokrouhlování s printf (BASH)
Už jsem našel, co potřebuji
var=332.5
echo $var | awk '{print int($1+0.5)}'
var=1995.5
echo $var | awk '{print int($1+0.5)}'
Děkuji za nasměrování
Webové síťové nástroje: http://nettools.mzettik.cz (pracuje se na tom - pomalu :-) )
7.7.2019 02:31 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Divné zaokrouhlování s printf (BASH)
Odpovědět | | Sbalit | Link | Blokovat | Admin

Kromě „round half to even“ bych ještě upozornil na možnost [s největší pravděpodobností to není tento případ], že v numerické reprezentaci jedno číslo skončí jako něco.4999999999 a druhé číslo jako něcojiného.5000000001. Jasně, že u malých čísel se to asi nestane, ale když číslo překročí rozsah mantisy, začnou se dít zajímavé věci.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.