GNU/Linux >> Belajar Linux >  >> Linux

bc memotong nomor floating point

Gunakan / operator.

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

Coba solusi berikut. Itu akan memotong apapun setelah titik desimal tanpa masalah:

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

Anda dapat membuat kode sedikit lebih pendek dengan melakukan penghitungan langsung pada angka:

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

Secara umum, Anda dapat menggunakan fungsi ini untuk mendapatkan hanya bagian bilangan bulat dari sebuah angka:

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

Simpan kode itu ke dalam file (sebut saja int.bc ) dan jalankan perintah berikut:

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

Membagi dengan 1 berfungsi dengan baik jika scale adalah 0 (misalnya, jika Anda memulai bc dengan bc dan jangan ubah scale ) tetapi gagal jika scale positif (misalnya, jika Anda memulai bc dengan bc -l atau tingkatkan scale ). (Lihat transkrip di bawah.) Untuk solusi umum, gunakan trunc berfungsi seperti berikut:
define trunc(x) { auto s; s=scale; scale=0; x=x/1; scale=s; return x }

Transkrip yang mengilustrasikan bagaimana membagi dengan 1 dengan sendirinya gagal di bc -l kasus, tapi bagaimana trunc fungsi bekerja dengan baik saat memotong ke arah nol:

> 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. Apa nomor inode di Linux?

  2. Jumlah File yang Mengandung String yang Diberikan?

  3. Nomor perangkat dalam keluaran perintah stat

  1. Jumlah Baris Dikeluarkan Oleh Ls?

  2. Hitung Jumlah Hari Untuk Pembayaran?

  3. Tingkatkan Nomor Bangun Di Bash?

  1. Membulatkan angka yang dibagi dalam Bash

  2. Pembuangan Inti Pengecualian Titik Terapung

  3. Bagaimana cara mencetak nomor di perakitan NASM?