GNU/Linux >> Tutoriales Linux >  >> Linux

bc número de punto flotante truncado

Usa / operador.

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

Pruebe la siguiente solución. Truncará cualquier cosa después del punto decimal sin ningún problema:

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

Puede acortar un poco el código realizando cálculos directamente en los números:

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

En general, puede usar esta función para obtener solo la parte entera de un número:

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

Guarde ese código en un archivo (llamémoslo int.bc ) y ejecute el siguiente comando:

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

Dividir por 1 funciona bien si scale es 0 (por ejemplo, si comienza bc con bc y no cambies scale ) pero falla si scale es positivo (por ejemplo, si comienza bc con bc -l o aumentar scale ). (Vea la transcripción a continuación). Para una solución general, use un trunc funcionar como la siguiente:
define trunc(x) { auto s; s=scale; scale=0; x=x/1; scale=s; return x }

Transcripción que ilustra cómo la división por 1 por sí sola falla en el bc -l caso, pero cómo trunc la función funciona bien al truncar hacia cero:

> 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. ¿Qué es el número de inodo en Linux?

  2. ¿Número de archivos que contienen una cadena determinada?

  3. ¿Número de líneas emitidas por Ls?

  4. Redondear un número dividido en Bash

  5. Número de dispositivo en la salida del comando stat

Escribe un juego de adivinanzas en ncurses en Linux

Golpe para bucle

Expresión de secuencia Bash (rango)

Bash Select (hacer menús)

Cómo hacer ping a un número de puerto en Linux

Cómo hacer ping a un número de puerto específico