ব্যাশে bc ব্যবহার করে দশমিকগুলি কীভাবে গোল করবেন?


45

বাশ স্ক্রিপ্টিংটি আমি কী চাই তার একটি দ্রুত উদাহরণ:

#!/bin/bash
echo "Insert the price you want to calculate:"
read float
echo "This is the price without taxes:"
echo "scale=2; $float/1.18" |bc -l
read -p "Press any key to continue..."
bash scriptname.sh

দামটি ধরে নিলে: 48.86 উত্তরটি হবে: 41.406779661 (41.40 আসলে কারণ আমি ব্যবহার করছি scale=2;)

আমার প্রশ্ন হ'ল উত্তরটি এভাবে দেখানোর জন্য আমি দ্বিতীয় দশমিককে কীভাবে গোল করব ?: 41.41


আমি এটিকে অদ্ভুত বলে মনে করি কারণ "প্রিন্টফ"% 0.2f \ n "41.445" এখন কাজ করে তবে "প্রিন্টফ"% 0.2f \ n "41.435 এবং প্রিন্টফ"% 0.2f \ n "41.455" করেন। এমনকি আপনার নিজের কেস কাজ করে (12.04 এ) তবে .445 এর সাথে নয়
লুইস আলভারাডো

8
আইএমএইচও, কেউ এই প্রশ্নের সন্তোষজনকভাবে উত্তর দেয়নি, সম্ভবত bcযা অনুরোধ করা হচ্ছে তা অর্জন করতে পারে না (বা কমপক্ষে আমি যখন এই পোস্টটি পেয়েছি তখন যে প্রশ্নটি জিজ্ঞাসা করছিলাম) এটি কীভাবে ডেসিমাল ব্যবহার করে গোল করা যায়bc (যেটি দ্বারা ডাকা হয় bash)।
অ্যাডাম কাটজ

আমি জানি এই প্রশ্নটি পুরানো, তবে আমি আমার নিজের বিসি: github.com/gavinhoward/bc- এর প্রয়োগ বাস্তবায়নের জন্য একটি মন্তব্য প্রতিহত করতে পারি না । তার জন্য, এটি r()ফাংশন সহ অন্তর্নির্মিত লাইব্রেরিতে রয়েছে , যাতে আপনি ব্যবহার করতে পারেন bc -le "r($float/1.18, 2)"
গ্যাভিন হাওয়ার্ড

উত্তর:


31

একটি বাশ রাউন্ড ফাংশন:

round()
{
echo $(printf %.$2f $(echo "scale=$2;(((10^$2)*$1)+0.5)/(10^$2)" | bc))
};

আপনার কোড উদাহরণে ব্যবহৃত:

#!/bin/bash
# the function "round()" was taken from 
# http://stempell.com/2009/08/rechnen-in-bash/

# the round function:
round()
{
echo $(printf %.$2f $(echo "scale=$2;(((10^$2)*$1)+0.5)/(10^$2)" | bc))
};

echo "Insert the price you want to calculate:"
read float
echo "This is the price without taxes:"
#echo "scale=2; $float/1.18" |bc -l
echo $(round $float/1.18 2);
read -p "Press any key to continue..."

শুভকামনা: ও)


1
বিটিডব্লু, যদি সংখ্যাটি নেতিবাচক হয় তবে আমাদের ব্যবহার করতে হবে-0.5
কুম্ভ শক্তি

পরীক্ষার কনসোলটিতে কাজ করার উদাহরণটি পাইনি! "ডিবাগিং" কিছুটা প্রকাশ করেছিল যে উদাহরণস্বরূপ $2 = 3আমাকে ব্যবহার করতে হয়েছিল echo $(env printf %.3f $(echo "scale=3;((1000*$1)+0.5)/1000" | bc))প্রিন্টফের আগে এনভির মন ! এটি আবার আপনাকে শেখাবে যে আপনি অন্য কোথাও থেকে কপি-পেস্ট করছেন তা বোঝা সর্বদা গুরুত্বপূর্ণ ।
সিন্টাক্সেরর

@ অ্যাকোরিয়াস পাওয়ার অনুপ্রেরণার জন্য ধন্যবাদ! আমি এখন উপরের স্ক্রিপ্টের একটি সংস্করণ তৈরি করেছি যা নেতিবাচক এবং ধনাত্মক উভয় সংখ্যার সাথে কাজ করবে।
সিন্টাক্সেরর

এটি অপ্রয়োজনীয়ভাবে জটিল এবং মাইগাস এবং জুবেরুবারের সহজ উত্তরগুলিতে পৌঁছানোর জন্য সমস্ত ধরণের অতিরিক্ত পাটিগণিত করে।
অ্যাডাম কাটজ

@ অ্যাকোয়ারিয়াস পাওয়ার +1 হ্যাঁ, এটি নেতিবাচক সংখ্যার জন্য আলাদা। Negativeণাত্মক (অ-পূর্ণসংখ্যার!) সংখ্যার জন্য পরীক্ষা করতে, আমি কিছু চেষ্টা করে if [ "" 1/1 "প্রতিধ্বনিতে স্থির হয়েছি | bc` -gt 0] `-" ("-" এর জন্য স্ট্রিংকে পার্স করা ব্যতীত) চেক করার আরও কি মার্জিত উপায় আছে?
রবার্টজি

30

সহজ সমাধান:

printf %.2f $(echo "$float/1.18" | bc -l)

2
উপরোক্ত একটি মন্তব্যেও যেমন বলা হয়েছে ( Askubuntu.com/a/179949/512213 ), দুর্ভাগ্যক্রমে, এটি নেতিবাচক সংখ্যার জন্য ভুল আচরণ করবে।
রবার্টজি

2
@ রবার্টজি: কেন? এই সমাধানটি ব্যবহার করে না +0.5। ব্যবহার করে দেখুন printf "%.2f\n" "$(bc -l <<<"48.86/1.18")" "$(bc -l <<<"-48.86/1.18")"এবং আপনি পাবেন 41.41এবং -41.41
মুশিফিল

1
একটি পাইপ ব্যবহার করেও সম্ভব:echo "$float/1.18" | bc -l | xargs printf %.2f
মিষ্টি

এই উত্তরের সমাধানটি আমাকে দেয় bash: printf: 1.69491525423728813559: invalid number:, লোকালের উপর নির্ভর করে।
টর্স্টেন ব্রোঞ্জার

19

বাশ / অজানা গোলাকার:

echo "23.49" | awk '{printf("%d\n",$1 + 0.5)}'  

অজগর থাকলে আপনি এরকম কিছু ব্যবহার করতে পারেন:

echo "4.678923" | python -c "print round(float(raw_input()))"

টিপটির জন্য ধন্যবাদ তবে এটি আমার যা প্রয়োজন তা সমাধান করে না। আমাকে কেবল বাশ ব্যবহার করে এটি করতে হবে ...
ব্ল্যাকডেক্স

1
পাইথন কমান্ডটি আরও পঠনযোগ্য এবং দ্রুত স্ক্রিপ্টগুলির জন্য ভাল। রাউন্ড ফাংশনে উদাহরণস্বরূপ ", 3" যোগ করে নির্বিচারে ডিজিটের রাউন্ডিংকে সমর্থন করে। ধন্যবাদ
এলে

echo "$float" |awk '{printf "%.2f", $1/1.18}'শততম অনুরোধকৃত পার্সিশনে প্রশ্নের অনুরোধিত গণিতটি সম্পাদন করবে। bcএটি প্রশ্নের মধ্যে যতটা "বাশ ব্যবহার করা" ।
অ্যাডাম কাটজ

2
পাইথনের জন্য আপনি ঠিক python -c "print(round($num))"যেখানে কিছু ব্যবহার করতে পারেন num=4.678923। স্টিডিনের সাথে উপহাস করার দরকার নেই। এছাড়াও আপনি রাউন্ডে এন সংখ্যার তাই পছন্দ করতে পারেন: python -c "print(round($num, $n))"
ছয়

আমি এই সমাধানটি দিয়ে বেশ ঝরঝরে কিছু করতে পেরেছি, আমার সমস্যা 0.5 ছিল, এই ক্ষেত্রে আমি সর্বদা আমার প্রয়োজনীয় গোলটি পাইনি তাই আমি নিম্নলিখিতগুলি নিয়ে এসেছি: echo 5 | python -c "print int(round((float(raw_input())/2)-0.5))"(কখন + গোল হয়ে যাবে এবং গোলাকার হবে)।
ইয়ারন

4

এখানে একটি খাঁটি বিসি সমাধান রয়েছে। রাউন্ডিং বিধি: শূন্য থেকে দূরে +/- 0.5।

আপনি যে স্কেলটি সন্ধান করছেন তাতে $ ফলাফল_স্কলে রাখুন; আপনার গণিতটি এমন হওয়া উচিত যেখানে c MATH বিসি কমান্ড তালিকায় অবস্থিত:

bc <<MATH
h=0
scale=0

/* the magnitude of the result scale */
t=(10 ^ $result_scale)

/* work with an extra digit */
scale=$result_scale + 1

/* your math into var: m */
m=($MATH)

/* rounding and output */
if (m < 0) h=-0.5
if (m > 0) h=0.5

a=(m * t + h)

scale=$result_scale
a / t
MATH

1
অনেক আগ্রহব্যাঞ্জক! MATH=-0.34;result_scale=1;bc <<MATH, # অবজেক্টিভ এন্ড ক্লিয়ার: 5 এখানে বর্ণিত হিসাবে :)
কুম্ভ শক্তি

আমি এটি "সেরা উত্তরের" জন্য মনোনীত করি।
মার্ক ট্যামস্কি

2

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমার কাছে 'যদি' বা শাখা ছাড়াই একটি খাঁটি 'বিসি'-সমাধান রয়েছে:

#!/bin/sh
bcr()
{
    echo "scale=$2+1;t=$1;scale-=1;(t*10^scale+((t>0)-(t<0))/2)/10^scale" | bc -l
}

এটির মতো bcr '2/3' 5বা bcr '0.666666' 2-> (স্কেল অনুসারে প্রকাশ)

এটি সম্ভব কারণ বিসিতে (সি / সি ++ এর মতো) এটি আপনার গণনায় লজিক্যাল এক্সপ্রেশনগুলিকে মিশ্রিত করার অনুমতি দেয়। ((t>0)-(t<0))/2)'T' এর চিহ্নের উপর নির্ভর করে অভিব্যক্তিটি +/- 0.5 তে মূল্যায়ন করবে এবং সুতরাং গোল করার জন্য সঠিক মানটি ব্যবহার করবে।


এটি ঝরঝরে দেখায় তবে পরিবর্তে bcr "5 / 2" 0ফিরে আসে । আমি কিছু অনুপস্থিত করছি? 23
blujay

1
#!/bin/bash
# - loosely based on the function "round()", taken from 
# http://stempell.com/2009/08/rechnen-in-bash/

# - inspired by user85321 @ askubuntu.com (original author)
#   and Aquarius Power

# the round function (alternate approach):

round2()
{
    v=$1
    vorig=$v
    # if negative, negate value ...
    (( $(bc <<<"$v < 0") == 1 )) && v=$(bc <<<"$v * -1")
    r=$(bc <<<"scale=$3;(((10^$3)*$v/$2)+0.5)/(10^$3)")

    # ... however, since value was only negated to get correct rounding, we 
    # have to add the minus sign again for the resulting value ...

    (( $(bc <<< "$vorig < 0") == 1 )) && r=$(bc <<< "$r * -1")
    env printf %.$3f $r
};

echo "Insert the price you want to calculate:"
read float
echo "This is the price without taxes:"
round2 $float 1.18 2
echo && read -p "Press any key to continue..."

এটি আসলে সহজ: নেতিবাচক সংখ্যার জন্য একটি হার্ডকোডযুক্ত "-0.5" রূপটি স্পষ্টভাবে যুক্ত করার দরকার নেই। গাণিতিকভাবে উচ্চারিত, আমরা শুধু গনা করব পরম মান যুক্তির এবং এখনও যোগ আমরা স্বাভাবিকভাবে would হিসাবে 0.5। তবে যেহেতু (দুর্ভাগ্যক্রমে) abs()আমাদের নিষ্পত্তিতে কোনও অন্তর্নির্মিত ফাংশন নেই (যদি না আমরা একটি কোড করি), তবে আমরা যুক্তিটি নেতিবাচক হলে কেবল এড়িয়ে যাব ।

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


@ আপনার সাম্প্রতিক সম্পাদনাগুলি সম্পর্কে গুরু: শৈলীর গাণীর পরিবর্তে হিস্ট্রোরিংস echo .. |, এর অর্থ কী echo $()? এটি ব্যাখ্যা করা সহজ: আপনার এখানে স্ট্রিংগুলির জন্য সর্বদা একটি লিখনযোগ্য/tmp ডিরেক্টরি প্রয়োজন হবে ! এবং আমার সমাধানটি কেবল পঠনযোগ্য পরিবেশেও কাজ করবে, যেমন একটি জরুরি রুট শেল যেখানে সর্বদা ডিফল্টরূপে লিখনযোগ্য /হয় না । সুতরাং আমি কেন এভাবে কোড করেছিলাম তার একটি ভাল কারণ ছিল।
সিনট্যাক্সারর

হেরেস্ট্রিংস, আমি সম্মত। কিন্তু কখন echo $()দরকার হয়? সেই এবং ইন্ডেন্টেশনটি আমার সম্পাদনাগুলিকে উত্সাহিত করেছিল, হিস্ট্রোস্ট্রিংগুলি সবেমাত্র ঘটেছে।
মুড়ু

@ মুরু ঠিক আছে, এর সবচেয়ে অর্থহীন কেসটি echo $()স্থির করার জন্য বিলম্বিত ছিল বাস্তবে পেনাল্টিমেট লাইন, এলওএল। সতর্ক থাকুন জন্য ধন্যবাদ. কমপক্ষে এটি এখন আরও ভাল দেখায়, আমি অস্বীকার করতে পারি না। যাইহোক, আমি এই যুক্তি পছন্দ। প্রচুর বুলিয়ান স্টাফ, "যদি" এর চেয়ে কম অতিরিক্ত অতিরিক্ত হয় (যা অবশ্যই কোডটি 50 শতাংশ দ্বারা উড়িয়ে দেবে)।
সিনট্যাক্সারর

1

আমি এখনও 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.8610¹⁰ × 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)


1

যদি আপনার ফলাফল হয়, উদাহরণস্বরূপ 2.3747888 বিবেচনা করুন

আপনাকে যা করতে হবে তা হ'ল:

d=$(echo "(2.3747888+0.5)/1" | bc); echo $d

এই নম্বরটি সঠিকভাবে গোল করে:

(2.49999 + 0.5)/1 = 2.99999 

দশমিকগুলি এর দ্বারা সরিয়ে ফেলা হয় bcএবং তাই এটি যতটা হওয়া উচিত তা 2 এর নিচে হয়


1

আমাকে অডিও ফাইল সংগ্রহের মোট সময়কাল গণনা করতে হয়েছিল।

সুতরাং আমি করতে হয়েছিল:

উ: প্রতিটি ফাইলের জন্য সময়কাল পান ( দেখানো হয়নি )

বি। সমস্ত সময়সীমা যুক্ত করুন (সেগুলি প্রতিটি NNN.NNNNNN(fp) সেকেন্ডের মধ্যে ছিল)

সি পৃথক ঘন্টা, মিনিট, সেকেন্ড, সাবসেকেন্ড।

D. এইচআর: এমআইএন: এসইসি: ফ্রেমস, যেখানে ফ্রেম = 1/75 সেকেন্ডের একটি স্ট্রিং আউটপুট দেয়।

(ফ্রেমগুলি স্টুডিওতে ব্যবহৃত এসএমপিটিই কোড থেকে আসে))


উত্তর: ffprobeএকটি এফপি সংখ্যার মধ্যে সময়কালীন রেখার ব্যবহার এবং পার্স করুন (দেখানো হয়নি)

B ইংরেজী বর্ণমালার দ্বিতীয় অক্ষর:

 # add them up as a series of strings separated by "+" and send it to bc

arr=( "${total[@]}" )  # copy array

# IFS is "Internal Field Separator"
# the * in arr[*] means "all of arr separated by IFS" 
# must have been made for this
IFS='+' sum=$(echo "scale=3; ${arr[*]} "| bc -l)# (-l= libmath for fp)
echo $sum 

সি:

# subtract each amount of time from tt and store it    
tt=$sum   # tt is a running var (fp)


hrs=$(echo "$tt / 3600" | bc)

tt=$(echo "$tt - ( $hrs * 3600 )" | bc )

min=$(echo "$tt / 60" | bc )

tt=$(echo "$tt - ($min *60)" | bc )

sec=$(echo "$tt/1" | bc )

tt=$(echo "$tt - $sec" | bc )

frames=$(echo "$tt * 75"  | bc ) # 75 frames /sec 
frames=$(echo "$frames/1" | bc ) # truncate to whole #

ডি:

#convert to proper format with printf (bash builtin)        
hrs=$(printf "%02d\n" $hrs)  # format 1 -> 01 

min=$(printf "%02d\n" $min)

sec=$(printf "%02d\n" $sec)

frames=$(printf "%02d\n" $frames)

timecode="$hrs:$min:$sec:$frames"

# timecode "01:13:34:54"

1

আপনার স্ক্রিপ্টটির সংক্ষিপ্ত সংস্করণ এখানে দেওয়া হয়েছে, যা আপনি চাইবেন আউটপুট সরবরাহ করতে স্থির:

#!/bin/bash
float=48.86
echo "You asked for $float; This is the price without taxes:"
echo "scale=3; price=$float/1.18 +.005; scale=2; price/1 " | bc

নোট করুন যে নিকটতম পূর্ণসংখ্যার জন্য বৃত্তাকার .5 যোগ করা এবং মেঝে নেওয়া, বা বৃত্তাকার নীচে (ধনাত্মক সংখ্যার জন্য) সমান।

এছাড়াও, স্কেল ফ্যাক্টর প্রয়োগের সময় প্রয়োগ করা হয়; সুতরাং (এগুলি bcআদেশ, আপনি এটিকে আপনার টার্মিনালে পেস্ট করতে পারেন):

float=48.86; rate=1.18; 
scale=2; p2=float/rate
scale=3; p3=float/rate
scale=4; p4=float/rate
print "Compare:  ",p2, " v ", p3, " v ", p4
Compare:  41.40 v 41.406 v 41.4067

# however, scale does not affect an entered value (nor addition)
scale=0
a=.005
9/10
0
9/10+a
.005

# let's try rounding
scale=2
p2+a
41.405
p3+a
41.411
(p2+a)/1
41.40
(p3+a)/1
41.41

1

অনুরোধ অনুযায়ী খাঁটি বিসি বাস্তবায়ন

define ceil(x) { auto os,xx;x=-x;os=scale;scale=0 xx=x/1;if(xx>x).=xx-- scale=os;return(-xx) }

যদি আপনি এটি ফাংশন.বিসি নামে একটি ফাইলে রাখেন তবে আপনি এটির সাথে গোল করতে পারবেন

echo 'ceil(3.1415)' | bc functions.bc

বিসি বাস্তবায়নের জন্য কোডটি http://phodd.net/gnu-bc/code/funcs.bc এ পাওয়া গেছে


0
bc() {
        while :
        do
                while IFS='$\n' read i
                do
                        /usr/bin/bc <<< "scale=2; $i" | sed 's/^\./0&/'
                done
        done
}

0

আপনি বিশ্রী ব্যবহার করতে পারেন, কোনও পাইপ প্রয়োজন নেই:

$> PRICE=48.86
$> awk -vprice=$PRICE "BEGIN{printf(\"%.2f\n\",price/1.18+0.005)}"
41.41

পরিবেশ পরিবর্তনশীল সহ আগেই দাম নির্ধারণ করুন PRICE=<val>

  • তারপরে অ্যাজকে কল করুন - $PRICEএকটি awk ভেরিয়েবল হিসাবে বিশ্রী হয়ে যাবে price

  • এরপরে এটি +005 সহ নিকটতম 100 তম পর্যন্ত গোল হয়।

  • প্রিন্টফ বিন্যাসকরণ বিকল্পটি %.2fস্কেলকে দুটি দশমিক স্থানে সীমাবদ্ধ করে।

আপনার যদি এটি অনেক কিছু করতে হয় তবে নির্বাচিত উত্তরের চেয়ে অনেক বেশি দক্ষ:

time for a in {1..1000}; do echo $(round 48.86/1.18 2) > /dev/random; done
real    0m8.945s
user    0m6.067s
sys 0m4.277s

time for a in {1..1000}; do awk -vprice=$PRICE "BEGIN{printf(\"%.2f\n\",price/1.18+0.005)}">/dev/random; done
real    0m2.628s
user    0m1.462s
sys 0m1.275s
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.