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