bc
จัดการตัวเลขเป็นจำนวนเต็ม:
# echo "100/3" | bc
33
bc -l
จัดการตัวเลขเป็นวัตถุจุดลอยตัว:
# echo "100/3" | bc -l
33.33333333333333333333
มีวิธี จำกัด จำนวนหลักหลังจุดทศนิยมหรือไม่?
1234*1.0
จะให้คุณได้อย่างไร1234.0
bc
จัดการตัวเลขเป็นจำนวนเต็ม:
# echo "100/3" | bc
33
bc -l
จัดการตัวเลขเป็นวัตถุจุดลอยตัว:
# echo "100/3" | bc -l
33.33333333333333333333
มีวิธี จำกัด จำนวนหลักหลังจุดทศนิยมหรือไม่?
1234*1.0
จะให้คุณได้อย่างไร1234.0
คำตอบ:
ตั้งค่าscale
ตัวแปรพิเศษ:
$ echo "scale=2; 100/3" | bc
33.33
$ echo "scale=2; (100/180)*180" | bc
ให้ 99.00 :(
.5
มันจะดีถ้ามันโค้งขึ้นถ้าข้างต้น หากปัดเศษขึ้นนี้จะเป็น~$ echo "scale=2; 12/104" | bc
.11
.12
อย่างไรก็ตามมันก็ควรจะทำงานให้สำเร็จ
echo "result = (100/180) * 180; scale=2; result / 1" | bc -l
คุณสามารถรักษาความแม่นยำจนพิมพ์ค่าด้วยวิธีนี้: 99.99
ตอนนี้คุณจะได้รับ
scale
ใช้งานได้สำหรับการแบ่งเท่านั้น หาก geeks บางอย่างต้องการมันในการคูณคุณสามารถทำได้โดยใช้การจัดการสตริง บอกว่าถ้าคุณต้องคูณ32 * 0.60
, 19.20
คำตอบคือ หากคุณต้องการตอบเพียง 19 ข้อเท่านั้นคุณสามารถทำได้หลายวิธี
ใช้การจัดการสตริง
$ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
19
ไวยากรณ์การจัดการสตริง: ${Variable%pattern}
สิ่งนี้จะลบรูปแบบการจับคู่แบบสั้นที่มาหลังจาก%
นั้น สำหรับรายละเอียดเพิ่มเติม String จัดการดูขั้นสูงทุบตี Scripting-Guide
ใช้Scale
ตามที่ระบุไว้โดย**chronitis**
$ echo "scale=0; 32*60/100" | bc
19
หากต้องการกำจัด 0 ต่อท้ายแทนที่จะจัดการสตริงคุณสามารถทำการหารด้วย 1 ได้
$ echo "0.232 * 1000" | bc
232.000
$ echo "0.232 * 1000 / 1" | bc
232
นอกจากคำตอบก่อนหน้า
echo "scale=2; 1.0150876" | bc
ผลตอบแทน
1.0150876
เพิ่มการดำเนินการทางคณิตศาสตร์เพื่อให้ได้เพียง 2 ตัวเลขทศนิยม - (NUMBER * 100) / 100
echo "scale=2; (1.0150876 * 100) / 100" | bc
ตอนนี้กลับมา
1.01
คุณสามารถใช้คำสั่ง printf เพื่อปัดเศษผลลัพธ์ได้มากถึง 3 ทศนิยม
# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333
หมดยก
scale = 2 ตัดคำตอบให้เป็นทศนิยมสองหลัก แต่เราสามารถปัดเศษได้ดังนี้:
$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12
scale=0;1234*1.1
คุณต้องเขียนเป็นที่จะได้รับscale=0;1234*1.1/1
1357
มิฉะนั้นไม่ว่าค่าของคุณจะได้รับscale
1357.4