বিসি: দশমিক পয়েন্টের পরে অঙ্কের সংখ্যা নির্ধারণ করুন


52

bc পূর্ণসংখ্যার হিসাবে সংখ্যাগুলি পরিচালনা করে:

# echo "100/3" | bc
33

bc -l ভাসমান পয়েন্ট অবজেক্ট হিসাবে সংখ্যাগুলি পরিচালনা করে:

# echo "100/3" | bc -l
33.33333333333333333333

দশমিক বিন্দুর পরে অঙ্কের সংখ্যা সীমাবদ্ধ করার কোনও উপায় আছে কি?


10
মজার বিষয়, এটি কেবল বিভাগ নিয়ে কাজ করে। আপনি যদি করতে চান তবে আপনাকে scale=0;1234*1.1এটি scale=0;1234*1.1/1পেতে লিখতে হবে 1357। অন্যথায়, scaleআপনি মূল্য পাবেন না কেন 1357.4
উইক

প্রশ্নটির চেয়ে @Wok এর মন্তব্য কি গ্রহণযোগ্য উত্তরের উপর থাকা উচিত নয়? আমি উত্তরটি পড়ার আগ পর্যন্ত এই মন্তব্যটি কী উল্লেখ করছে তা আমার কোনও ধারণা ছিল না।
উইলসন এফ

1
@ উইলসনএফ উত্তরে একটি রেফারেন্স যুক্ত করেছে।
আদম মতান

2
@ ভোক, এটি বিভাজন বা গুণনের উপর নির্ভর করে না। এটি ইনপুট উপর নির্ভর করে - বৃহত্তম নির্ভুলতা নম্বর আউটপুট মধ্যে নির্ভুলতা নির্ধারণ করে। 1234*1.0আপনাকে কীভাবে দেবে তা লক্ষ্য করুন1234.0
রিচলভ

উত্তর:


70

scaleবিশেষ পরিবর্তনশীল সেট করুন :

$ echo "scale=2; 100/3" | bc
33.33

3
প্রশ্নে @ ওয়াকের মন্তব্য দেখুন।
আদম মতান

$ echo "scale=2; (100/180)*180" | bc99.00 দেয় :(
ডোনাতাস ওলসেভিয়াস

@ ডোনাটাস ওলসেভিউয়াস এটি কারণ (100/180) = 0.55 এবং তারপরে (0.55 * 180) = 99. সুতরাং এটি আপনাকে সঠিক মূল্য দিচ্ছে :)
কমলদীপ সিং ভাটিয়া

এটি উপরে যদি গোল হয় তবে এটি দুর্দান্ত হবে .5~$ echo "scale=2; 12/104" | bc .11 যদি গোল হয়ে যায় তবে এটি হবে .12। তবে এটি এখনও আমার কাজের জন্য কাজ করা উচিত।
jbrock

3
আপনি মান এই ভাবে মুদ্রণ পর্যন্ত স্পষ্টতা বজায় রাখতে পারে: echo "result = (100/180) * 180; scale=2; result / 1" | bc -l। এখন আপনি পাবেন 99.99
বায়রন হকিন্স

10

scaleকেবল বিভাগের জন্য কাজ করে; যদি কিছু গীককে এটির গুণে প্রয়োজন হয়, তবে আপনি স্ট্রিং ম্যানিপুলেশন ব্যবহার করে এটি অর্জন করতে পারেন। যদি আপনি গুন প্রয়োজন বলুন 32 * 0.60, উত্তর 19.20। উত্তরে যদি আপনার একা 19 দরকার হয় তবে আপনি এটি বিভিন্ন পদ্ধতি দ্বারা পেতে পারেন।

  1. স্ট্রিং ম্যানিপুলেশন ব্যবহার করে

    $ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
    19
    

    স্ট্রিং ম্যানিপুলেশন সিনট্যাক্স:, ${Variable%pattern}এটি পরে সংক্ষিপ্ত মিলের প্যাটার্ন মুছে ফেলবে %। আরও স্ট্রিং ম্যানিপুলেশন বিশদের জন্য অ্যাডভান্সড ব্যাশ-স্ক্রিপ্টিং গাইড দেখুন

  2. Scaleদ্বারা বর্ণিত হিসাবে ব্যবহার**chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
  3. পিছনের 0s থেকে পরিত্রাণ পেতে স্ট্রিং ম্যানিপুলেশনের পরিবর্তে, কেউ 1 দ্বারা বিভাজনও করতে পারে।

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    

মনে রাখবেন যে, আমি প্রশ্নটিতে আমার মন্তব্যে যেমন উল্লেখ করেছি, এটি সংখ্যাবৃদ্ধির ফলে নয়, বরং দশমিক অংশের ইনপুট সংখ্যার দ্বারা হয়। অথবা, অন্যভাবে বলতে গেলে, "দীর্ঘতম" দশমিক অংশযুক্ত সংখ্যাটি নির্ধারণ করবে যে আউটপুট কত দশমিক স্থান পাবে।
রিচলভ

4

আগের উত্তরগুলি ছাড়াও

echo "scale=2; 1.0150876" | bc

রিটার্নস

1.0150876

মাত্র 2 দশমিক সংখ্যা - (সংখ্যা * 100) / 100 পাওয়ার জন্য গণিত ক্রিয়াকলাপগুলি যুক্ত করুন

echo "scale=2; (1.0150876 * 100) / 100" | bc

এখন ফিরে

1.01

3

ফলস্বরূপ 3 ডেসিমাল পর্যন্ত ছাপিয়ে প্রিন্টফ কমান্ড ব্যবহার করতে পারেন

# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333

2

সুসম্পন্ন করা

স্কেল = 2 দুটি দশমিক অঙ্কের উত্তরকে ছাঁটাই করে, তবে আমরা এর মতো রাউন্ড-অফ অর্জন করতে পারি:

$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.