GNU/Linux >> Znalost Linux >  >> Linux

bc zkrátit číslo s pohyblivou řádovou čárkou

Použijte / operátor.

echo '(4.2-1.3) / 1' | bc

Vyzkoušejte následující řešení. Bez problému zkrátí cokoli za desetinnou čárkou:

echo 'x = 4.2 - 1.3; scale = 0; x / 1' | bc -l
echo 'x = l(101) / l(10); scale = 0; x / 1' | bc -l

Kód můžete o něco zkrátit provedením výpočtů přímo na číslech:

echo 'scale = 0; (4.2 - 1.3) / 1' | bc -l
echo 'scale = 0; (l(101) / l(10)) / 1' | bc -l

Obecně můžete tuto funkci použít k získání pouze celé části čísla:

define int(x) {
    auto s;
    s = scale;
    scale = 0;
    x /= 1; /* This will have the effect of truncating x to its integer value */
    scale = s;
    return (x);
}

Uložte tento kód do souboru (říkejme mu int.bc ) a spusťte následující příkaz:

echo 'int(4.2 - 1.3);' | bc -l int.bc

Dělení 1 funguje dobře, pokud scale je 0 (např. pokud začínáte bc bc a neměňte scale ), ale selže, pokud scale je kladné (např. pokud začnete bc s bc -l nebo zvyšte scale ). (Viz přepis níže.) Pro obecné řešení použijte trunc fungovat jako následující:
define trunc(x) { auto s; s=scale; scale=0; x=x/1; scale=s; return x }

Přepis, který ilustruje, jak dělení 1 samo o sobě selhává v bc -l případ, ale jak trunc funkce funguje dobře při zkrácení směrem k nule:

> bc -l
bc 1.06.95
[etc...]
for (x=-4; x<4; x+=l(2)) { print x,"\t",x/1,"\n"}
-4  -4.00000000000000000000
-3.30685281944005469059 -3.30685281944005469059
-2.61370563888010938118 -2.61370563888010938118
-1.92055845832016407177 -1.92055845832016407177
-1.22741127776021876236 -1.22741127776021876236
-.53426409720027345295  -.53426409720027345295
.15888308335967185646   .15888308335967185646
.85203026391961716587   .85203026391961716587
1.54517744447956247528  1.54517744447956247528
2.23832462503950778469  2.23832462503950778469
2.93147180559945309410  2.93147180559945309410
3.62461898615939840351  3.62461898615939840351
define trunc(x) { auto s; s=scale; scale=0; x=x/1; scale=s; return x }
for (x=-4; x<4; x+=l(2)) { print x,"\t",trunc(x),"\n"}
-4  -4
-3.30685281944005469059 -3
-2.61370563888010938118 -2
-1.92055845832016407177 -1
-1.22741127776021876236 -1
-.53426409720027345295  0
.15888308335967185646   0
.85203026391961716587   0
1.54517744447956247528  1
2.23832462503950778469  2
2.93147180559945309410  2
3.62461898615939840351  3

Linux
  1. Co je číslo inodu v Linuxu?

  2. Zaokrouhlete dělené číslo v bash

  3. Číslo zařízení ve výstupu stat příkazu

  1. Počet souborů obsahujících daný řetězec?

  2. Jak zkrátit soubor podle řádků?

  3. Získejte počet navázaných spojení TCP

  1. Počet řádků vydaných Ls?

  2. Spočítat počet dní do platby?

  3. Zvýšit číslo sestavení v Bash?