GNU/Linux >> LINUX-Kenntnisse >  >> Linux

bc Fließkommazahl abschneiden

Verwenden Sie / Betreiber.

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

Versuchen Sie die folgende Lösung. Es wird alles nach dem Dezimalpunkt ohne Probleme abschneiden:

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

Sie können den Code etwas kürzer machen, indem Sie Berechnungen direkt mit den Zahlen durchführen:

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

Im Allgemeinen können Sie diese Funktion verwenden, um nur den ganzzahligen Teil einer Zahl zu erhalten:

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

Speichern Sie diesen Code in einer Datei (nennen wir ihn int.bc ) und führen Sie den folgenden Befehl aus:

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

Das Teilen durch 1 funktioniert gut, wenn scale ist 0 (z. B. wenn Sie bc mit bc beginnen und ändern Sie nicht scale ), schlägt aber fehl, wenn scale positiv ist (z. B. wenn Sie bc mit bc -l beginnen oder erhöhen Sie scale ). (Siehe Transkript unten.) Verwenden Sie für eine allgemeine Lösung trunc funktionieren wie folgt:
define trunc(x) { auto s; s=scale; scale=0; x=x/1; scale=s; return x }

Transkript, das veranschaulicht, wie die Division durch 1 allein in bc -l fehlschlägt Fall, aber wie trunc Funktion funktioniert gut beim Abschneiden gegen Null:

> 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. Was ist die Inode-Nummer unter Linux?

  2. Anzahl der Dateien, die eine bestimmte Zeichenfolge enthalten?

  3. Runden Sie eine geteilte Zahl in Bash

  4. Wie drucke ich eine Nummer in Assembly NASM?

  5. Wie kann man eine Datei zeilenweise abschneiden?

Schreiben Sie ein Ratespiel in ncurses unter Linux

Bash für Schleife

Bash-Sequenzausdruck (Bereich)

Bash Select (Menüs erstellen)

So pingen Sie eine Portnummer in Linux an

So pingen Sie eine bestimmte Portnummer an