GNU/Linux >> Linux Esercitazione >  >> Linux

bc tronca il numero in virgola mobile

Usa / operatore.

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

Prova la seguente soluzione. Troncherà qualsiasi cosa dopo il punto decimale senza problemi:

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

Puoi accorciare un po' il codice eseguendo i calcoli direttamente sui numeri:

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

In generale, puoi utilizzare questa funzione per ottenere solo la parte intera di un numero:

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);
}

Salva quel codice in un file (chiamiamolo int.bc ) ed esegui il seguente comando:

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

Dividere per 1 funziona bene se scale è 0 (ad esempio, se inizi bc con bc e non modificare scale ) ma fallisce se scale è positivo (ad esempio, se inizi bc con bc -l o aumentare scale ). (Vedi la trascrizione sotto.) Per una soluzione generale, usa un trunc funzione come la seguente:
define trunc(x) { auto s; s=scale; scale=0; x=x/1; scale=s; return x }

Trascrizione che illustra come la divisione per 1 da sola fallisce nel bc -l caso, ma come trunc function funziona correttamente nel troncamento verso lo zero:

> 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. Che cos'è il numero di inode in Linux?

  2. Numero di file contenenti una determinata stringa?

  3. Numero di righe emesse da Ls?

  4. Come troncare il file per righe?

  5. Ottieni il numero di connessioni TCP stabilite

Scrivi un gioco di indovinelli in ncurses su Linux

Bash For Loop

Espressione sequenza Bash (intervallo)

Bash Select (Crea menu)

Come eseguire il ping di un numero di porta in Linux

Come eseguire il ping di un numero di porta specifico