আমি এখনও bc
একটি ফাংশনের মধ্যে কীভাবে কেবল একটি মানকে গোল করতে পারি তার খাঁটি উত্তর খুঁজছি , তবে এখানে একটি খাঁটি bash
উত্তর:
#!/bin/bash
echo "Insert the price you want to calculate:"
read float
echo "This is the price without taxes:"
embiggen() {
local int precision fraction=""
if [ "$1" != "${1#*.}" ]; then # there is a decimal point
fraction="${1#*.}" # just the digits after the dot
fi
int="${1%.*}" # the float as a truncated integer
precision="${#fraction}" # the number of fractional digits
echo $(( 10**10 * $int$fraction / 10**$precision ))
}
# round down if negative
if [ "$float" != "${float#-}" ]
then round="-5000000000"
else round="5000000000"
fi
# calculate rounded answer (sans decimal point)
answer=$(( ( `embiggen $float` * 100 + $round ) / `embiggen 1.18` ))
int=${answer%??} # the answer as a truncated integer
echo $int.${answer#$int} # reassemble with correct precision
read -p "Press any key to continue..."
মূলত, এটি সাবধানে দশমিকগুলি বের করে, সবকিছুকে 100 বিলিয়ন (10¹⁰, 10**10
ইন bash
) দ্বারা গুণিত করে, নির্ভুলতা এবং বৃত্তাকার জন্য সামঞ্জস্য করে, প্রকৃত বিভাজন সম্পাদন করে, যথাযথ মাত্রায় ফিরে আসে এবং তারপরে দশমিকটিকে পুনরায় প্রবেশ করে।
ধাপে ধাপে:
embiggen()
ফাংশন নির্ধারণ তার যুক্তি আকারে পূর্ণসংখ্যা ছেঁটে ফেলা $int
এবং ডট পর সংখ্যার সংরক্ষণ $fraction
। ভগ্নাংশ সংখ্যার সংখ্যা উল্লেখ করা হয়েছে $precision
। গণিত তা বৃদ্ধি পায় 10¹⁰ এর সংযুক্তকরণের দ্বারা $int
এবং $fraction
তারপর সামঞ্জস্যপূর্ণ যে স্পষ্টতা মেলে (যেমন embiggen 48.86
10¹⁰ × 4886/100 এবং আয় হয়ে 488600000000
যা 488.600.000.000 যায়)।
আমরা শততমের চূড়ান্ত নির্ভুলতা চাই, সুতরাং আমরা প্রথম সংখ্যাটি 100 দ্বারা গুণ করি, বৃত্তাকার উদ্দেশ্যে 5 যুক্ত করি এবং তারপরে দ্বিতীয় সংখ্যাটি বিভক্ত করি। এই দায়িত্ব $answer
আমাদের একশ বার চূড়ান্ত উত্তর ছেড়ে যায়।
এখন আমাদের দশমিক পয়েন্ট যুক্ত করতে হবে। আমরা এর চূড়ান্ত দুটি সংখ্যা বাদ দিয়ে একটি নতুন $int
মান নির্ধারণ করি $answer
, তারপরে echo
এটি কোনও বিন্দুর সাথে এবং ইতিমধ্যে যত্ন নেওয়া মানটি $answer
বাদ দিয়ে $int
। (সিনট্যাক্স হাইলাইটিং বাগটি এটিকে মন্তব্যের মতো প্রকাশিত করে তোলে মনে করবেন না)
(বাশিজম: ক্ষয়ক্ষতিটি পসিক্স নয়, সুতরাং এটি একটি বাশিজম A একটি খাঁটি পোসিক্স দ্রবণে দশটির শক্তি ব্যবহারের চেয়ে জিরো যুক্ত করার জন্য লুপের প্রয়োজন হবে Also এছাড়াও, "এমিগজেন" একটি সম্পূর্ণ ক্রমুল্যান্ট শব্দ))
আমি zsh
আমার শেল হিসাবে ব্যবহার করার অন্যতম প্রধান কারণ হ'ল এটি ভাসমান পয়েন্ট গণিতকে সমর্থন করে। এই প্রশ্নের সমাধানটি এখানে বেশ সোজা zsh
:
printf %.2f $((float/1.18))
(আমি ভাসমান পয়েন্ট গাণিতিক সক্ষম করার কৌশলটির সাথে কেউ এই উত্তরে একটি মন্তব্য যুক্ত দেখতে দেখতে চাই bash
, তবে আমি নিশ্চিত যে এরকম বৈশিষ্ট্যটি এখনও বিদ্যমান নেই doesn't)